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', 6, 2) would return 'is'
substr('This is a test', 6) would return 'is a test'
substr('TechOnTheNet', -3, 3) would return 'Net'
substr('TechOnTheNet', -6, 3) would return 'The'
4、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
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步