sql server 和 oracle 中,ip与数字互转

来源:互联网 发布:软件创新设计方案 编辑:程序博客网 时间:2024/05/01 02:56

(一)Oracle中:

(1) IP转为数字:

[sql] view plaincopy
  1. create or replace function ip2number(ip varchar2)   
  2. return number  
  3. is  
  4.   ip_num_hex varchar2(80);  
  5. begin  
  6.   if (regexp_like(ip, '^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$')) then  
  7.      ip_num_hex := lpad(trim(to_char(regexp_replace(ip, '^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$''\1'), 'XX')),2,'0') ||  
  8.                    lpad(trim(to_char(regexp_replace(ip, '^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$''\2'), 'XX')),2,'0') ||  
  9.                    lpad(trim(to_char(regexp_replace(ip, '^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$''\3'), 'XX')),2,'0') ||  
  10.                    lpad(trim(to_char(regexp_replace(ip, '^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$''\4'), 'XX')),2,'0');  
  11.        
  12.      return to_number(ip_num_hex, 'XXXXXXXX');  
  13.   else  
  14.      return -1;  
  15.   end if;  
  16. exception  
  17. when others then  
  18.   return -99999999999;  
  19. end;  
  20.   
  21. select ip2number('169.254.55.6'from dual;  
  22.   
  23. IP2NUMBER('169.254.55.6')  
  24. -------------------------  
  25.                2852009734  

(2) 数字转为IP:

[sql] view plaincopy
  1. create or replace function number2ip(num number)  
  2. return varchar2 is  
  3.   ip_num_hex varchar2(8);  
  4. begin  
  5.   ip_num_hex := lpad(trim(to_char(num, 'XXXXXXXX')), 8, '0');  
  6.   return to_number(substr(ip_num_hex, 1, 2), 'XX') || '.' ||  
  7.          to_number(substr(ip_num_hex, 3, 2), 'XX') || '.' ||  
  8.          to_number(substr(ip_num_hex, 5, 2), 'XX') || '.' ||  
  9.          to_number(substr(ip_num_hex, 7, 2), 'XX');  
  10. exception  
  11. when others then  
  12.   dbms_output.put_line(sqlerrm);  
  13.   return null;  
  14. end;  
  15.   
  16. select number2ip(2852009734) from dual;  
  17.   
  18. NUMBER2IP(2852009734)                                                             
  19. --------------------------------------------------------------------------------  
  20. 169.254.55.6    

(二)SQL Server中:

(1) IP转为数字:

[sql] view plaincopy
  1. if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[f_IP2Int]')   and   xtype   in   (N'FN',   N'IF',   N'TF'))     
  2.   drop   function   [dbo].[f_IP2Int]     
  3.   GO     
  4.       
  5.   /*--字符型   IP   地址转换成数字   IP     
  6.       
  7.   /*--调用示例     
  8.       
  9.   select   dbo.f_IP2Int('192.168.0.11')     
  10.   select   dbo.f_IP2Int('12.168.0.1')     
  11.   --*/     
  12.   CREATE   FUNCTION   f_IP2Int(     
  13.   @ip   char(15)     
  14.   )RETURNS   bigint     
  15.   AS     
  16.   BEGIN     
  17.   DECLARE   @re   bigint     
  18.   SET   @re=0     
  19.   SELECT   @re=@re+LEFT(@ip,CHARINDEX('.',@ip+'.')-1)*ID     
  20.   ,@ip=STUFF(@ip,1,CHARINDEX('.',@ip+'.'),'')     
  21.   FROM(     
  22.   SELECT   ID=CAST(16777216   as   bigint)     
  23.   UNION   ALL   SELECT   65536     
  24.   UNION   ALL   SELECT   256     
  25.   UNION   ALL   SELECT   1)A     
  26.   RETURN(@re)     
  27.   END     
  28.   GO     

(2) 数字转为IP:

[sql] view plaincopy
  1. if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[f_Int2IP]')   and   xtype   in   (N'FN',   N'IF',   N'TF'))     
  2.  drop   function   [dbo].[f_Int2IP]     
  3.  GO     
  4.      
  5.  /*--数字   IP   转换成格式化   IP   地址     
  6.      
  7.  /*--调用示例     
  8.      
  9.  select   dbo.f_Int2IP(3232235531)     
  10.  select   dbo.f_Int2IP(212336641)     
  11.  --*/     
  12.  CREATE   FUNCTION   f_Int2IP(     
  13.  @IP   bigint     
  14.  )RETURNS   varchar(15)     
  15.  AS     
  16.  BEGIN     
  17.  DECLARE   @re   varchar(15)     
  18.  SET   @re=''     
  19.  SELECT   @re=@re+'.'+CAST(@IP/ID   as   varchar)     
  20.  ,@IP=@IP%ID     
  21.  from(     
  22.  SELECT   ID=CAST(16777216   as   bigint)     
  23.  UNION   ALL   SELECT   65536     
  24.  UNION   ALL   SELECT   256     
  25.  UNION   ALL   SELECT   1)a     
  26.  RETURN(STUFF(@re,1,1,''))     
  27.  END  

0 0
原创粉丝点击