1. 程式人生 > >sql server 和 oracle 中,ip與數字互轉

sql server 和 oracle 中,ip與數字互轉

(一)Oracle中:

(1) IP轉為數字:

  1. createorreplacefunction 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.      return to_number(ip_num_hex, 'XXXXXXXX');  
  12.   else
  13.      return -1;  
  14.   end if;  
  15. exception  
  16. when others then
  17.   return -99999999999;  
  18. end;  
  19. select ip2number('169.254.55.6'from dual;  
  20. IP2NUMBER('169.254.55.6')  
  21. -------------------------
  22.                2852009734  

(2) 數字轉為IP:

  1. createorreplacefunction 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.   returnnull;  
  14. end;  
  15. select number2ip(2852009734) from dual;  
  16. NUMBER2IP(2852009734)                                                             
  17. --------------------------------------------------------------------------------
  18. 169.254.55.6    

(二)SQL Server中:

(1) IP轉為數字:

  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.   dropfunction   [dbo].[f_IP2Int]     
  3.   GO     
  4.   /*--字元型   IP   地址轉換成數字   IP   
  5.   /*--呼叫示例   
  6.   select   dbo.f_IP2Int('192.168.0.11')     
  7.   select   dbo.f_IP2Int('12.168.0.1')     
  8.   --*/   
  9.   CREATEFUNCTION   f_IP2Int(     
  10.   @ip   char(15)     
  11.   )RETURNSbigint
  12.   AS
  13.   BEGIN
  14.   DECLARE   @re   bigint
  15.   SET   @re=0     
  16.   SELECT   @[email protected]+LEFT(@ip,CHARINDEX('.',@ip+'.')-1)*ID     
  17.   ,@ip=STUFF(@ip,1,CHARINDEX('.',@ip+'.'),'')     
  18.   FROM(     
  19.   SELECT   ID=CAST(16777216   asbigint)     
  20.   UNIONALLSELECT   65536     
  21.   UNIONALLSELECT   256     
  22.   UNIONALLSELECT   1)A     
  23.   RETURN(@re)     
  24.   END
  25.   GO     

(2) 數字轉為IP:

  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.  dropfunction   [dbo].[f_Int2IP]     
  3.  GO     
  4.  /*--數字   IP   轉換成格式化   IP   地址   
  5.  /*--呼叫示例   
  6.  select   dbo.f_Int2IP(3232235531)     
  7.  select   dbo.f_Int2IP(212336641)     
  8.  --*/   
  9.  CREATEFUNCTION   f_Int2IP(     
  10.  @IP   bigint
  11.  )RETURNSvarchar(15)     
  12.  AS
  13.  BEGIN
  14.  DECLARE   @re   varchar(15)     
  15.  SET   @re=''
  16.  SELECT   @[email protected]+'.'+CAST(@IP/ID   asvarchar)     
  17.  ,@[email protected]%ID     
  18.  from(     
  19.  SELECT   ID=CAST(16777216   asbigint)     
  20.  UNIONALLSELECT   65536     
  21.  UNIONALLSELECT   256     
  22.  UNIONALLSELECT   1)a     
  23.  RETURN(STUFF(@re,1,1,''))     
  24.  END