ORACLE 将IP字符串 与 数值 互转

ORACLE 将IP字符串 与 数值  互转

一、

复制代码
create or replace function ip_num(v_ip varchar) return number is
result number :
= 0;
begin
result :
= to_number(substr(v_ip, 1, instr(v_ip, '.', 1) - 1) * 256 * 256 * 256) +
to_number(substr(v_ip,
instr(v_ip,
'.', 1, 1) + 1,
instr(v_ip,
'.', 1, 2) - instr(v_ip, '.', 1, 1) - 1) * 256 * 256) +
to_number(substr(v_ip,
instr(v_ip,
'.', 2, 2) + 1,
instr(v_ip,
'.', 1, 3) - instr(v_ip, '.', 1, 2) - 1) * 256) +
to_number(substr(v_ip, instr(v_ip,
'.', 1, 3) + 1));
return result;
end ip_num;
复制代码

 

复制代码
create or replace function num_ip(v_num number) return varchar2 is
result varchar2(
20);
v_nn number;
begin
result :
= nvl(trunc(v_num / (256 * 256 * 256)), 0);
v_nn :
= mod(v_num, 256 * 256 * 256);
result :
= result || '.' || nvl(trunc(v_nn / (256 * 256)), 0);
v_nn :
= mod(v_num, 256 * 256);
result :
= result || '.' || nvl(trunc(v_nn / 256), 0);
v_nn :
= mod(v_num, 256);
result :
= result || '.' || v_nn;
return result;
end num_ip;
复制代码

 

二、

比如我的IP 为192.168.114.1==>>192168114001

假如为12.16.11.119==>>12016011119 

我的转换目的就是为了IP好比较

 

一、不通过函数的实现

to_number

(

lpad(substr(ip,1,instr(ip,'.',1,1)-1),3,'0')

||

lpad(substr(ip,instr(ip,'.',1,1)+1,instr(ip,'.',1,2)-instr(ip,'.',1,1)-1),3,'0')


||lpad(substr(ip,instr(ip,'.',1,2)+1,instr(ip,'.',1,3)-instr(ip,'.',1,2)-1),3,'0')

||lpad(substr(ip,instr(ip,'.',1,3)+1,length(ip)-instr(ip,'.',1,2)-1),3,'0')

)

 

1、to_number

语法:TO_NUMBER(string[,format[,nlsparams]])   
目的:将CHAR或VARCHAR2类型的string转换为一个NUMBER类型的数值,如果指定了format,那么string应该遵循相应的数字格式。nlsparams的用来指定小数点和钱分位分隔符,以及货币符号。它与TO_CHAR()互为反函数

在这只举一个简单的例子

select to_number('0023') from dual

结果为:

------

23  

2、lpad

在Oacle/PLSQL中,lpad函数将左边的字符串填充一些特定的字符,其语法格式如下:   

     lpad( string1, padded_length, [ pad_string ] )
     其中string1是需要粘贴字符的字符串
     padded_length是返回的字符串的数量,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成padded_length;

     pad_string是个可选参数,这个字符串是要粘贴到string1的左边,如果这个参数未写,lpad函数将会在string1的左边粘贴空格。
    例如:
          

lpad('tech', 7); 将返回' tech'

lpad('tech', 2); 将返回'te'
lpad('tech', 8, '0'); 将返回'0000tech'
lpad('tech on the net', 15, 'z'); 将返回 'tech on the net'
lpad('tech on the net', 16, 'z');

将返回 'ztech on the net'

 

 

3、substr

oracle的substr函数的用法
 取得字符串中指定起始位置和长度的字符串   substr( string, start_position, 
[ length ] )
 如:
     substr(
'This is a test'62)     would return 'is'
     substr(
'This is a test'6)     would return 'is a test'
     substr(
'TechOnTheNet'-33)     would return 'Net'
     substr(
'TechOnTheNet'-63)     would return 'The'

 

4、instr

INSTR方法的格式为
INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)

例如:INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串为'CORPORATE FLOOR', 目标字符串为'OR',起始位置为3,取第2个匹配项的位置。

默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。

所以SELECT INSTR('CORPORATE FLOOR', 'OR', -1, 1) "Instring" FROM DUAL的显示结果是

Instring
——————
14
posted @ 2011-09-04 19:17  jex  阅读(817)  评论(0)    收藏  举报
点击右上角即可分享
微信分享提示