SQL二进制转换为点分IP

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

/**********************************
* 功能:二进制转换为十进制
* 日期:2009-07-27
* 作者:
* 测试:select GetIPDecimal('11111111')
**********************************/

     ALTER FUNCTION [dbo].[GetIPDecimal](@ip VARCHAR(320))
     RETURNS NVARCHAR(32)
     AS
     BEGIN
   DECLARE @ipresult VARCHAR(500) --返回的结果
   DECLARE @result NVARCHAR(8) --截取的字符
   DECLARE @start INT --开始位置
   DECLARE @count INT --记录循环的次数
   DECLARE @JiShu INT --基数
   DECLARE @XinShuJu BIGINT --新数据
   DECLARE @result1 INT
   SET @count=1
   SET @start=1
   SET @JiShu=1
   SET @XinShuJu=0
   SET @ipresult=''
   WHILE(@count<=4)
    BEGIN
    SET @result=SUBSTRING(@ip,@start,8)
    --转换为十进制
    SET @result1=CONVERT(INT ,@result)
            WHILE(@result1>0)
      BEGIN
       SET @XinShuJu=@XinShuJu+(@result1%10)*@JiShu
       SET @result1=@result1/10
       SET @JiShu=@JiShu*2
      END
    SET @start=@count*8+1;
    SET @count=@count+1;
    SET  @ipresult=@ipresult+CONVERT(VARCHAR(8),@XinShuJu);
    IF (@count<>5)
    SET @ipresult=@ipresult+'.';
    SET @XinShuJu=0;
    SET @JiShu=1;
    END
   RETURN @ipresult
     END
    
    
    
    
  

posted @ 2009-07-27 23:37  NewSoftsNet  Views(340)  Comments(0Edit  收藏  举报