现在的位置: 首页 > 综合 > 正文

SQL点分IP地址转换为二进制

2012年12月08日 ⁄ 综合 ⁄ 共 1231字 ⁄ 字号 评论关闭
 

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

/**********************************
* 功能:IP转化为二进制
* 日期:2009-07-27
* 作者:
* 测试:select GetIPBinary('234.0.0.1)
**********************************/

     ALTER FUNCTION [dbo].[GetIPBinary](@ip VARCHAR(32))
     RETURNS NVARCHAR(32)
     AS
     BEGIN
   DECLARE @ipresult VARCHAR(50) --返回的结果
  
   DECLARE @IPAddress VARCHAR(9) --提取的IP地址
     
   DECLARE @index INT --取得.的索引
   DECLARE @yushu VARCHAR(10) --记录余数
   DECLARE @Shang INT  --除后得到的商
   DECLARE @JieGuo VARCHAR(30) --转化后的结果
   DECLARE @count INT
   SET @count=0
   SET @index =PATINDEX('%.%',@ip)-1
   SET @ipresult=''
   WHILE(@index>0)
    BEGIN
        SET @IPAddress=SUBSTRING(@ip,1,@index)
        SET @JieGuo=''
        --转化为8位二进制
        IF (CAST(@IPAddress AS INT)=0)
        BEGIN
         SET @JieGuo='00000000'
        END
        WHILE(CAST (@IPAddress AS INT)>0)
         BEGIN
          SET @yushu=@IPAddress%2
          SET @Shang=@IPAddress/2
          SET @IPAddress=@Shang
          SET @jieguo=@yushu+@JieGuo
         END
        while (LEN(@JieGuo)<>8)
            SET @JieGuo='0'+@JieGuo
        SET @ipresult=@ipresult +@JieGuo
        SET @ip=SUBSTRING(@ip,@index+2,LEN(@ip))
        SET @count=@count+1
        IF(@count<=2)
        SET @index=PATINDEX('%.%',@ip)-1
        ELSE
         SET @index=LEN(@ip)
    END
   RETURN @ipresult
     END
   
    
    
    

抱歉!评论已关闭.