蝈蝈俊.net

-- 用随笔来记录自己的技术感触
随笔 - 673, 评论 - 4374, 引用 - 276

导航

关于

记录自己的技术心得

标签

每月存档

最新留言

  • Cpifzcav
    real beauty page <a href=" http://www.wikio.com/user/orutupenakity/bio "&am...
    by Cpifzcav(匿名) on 2010/3/21 4:13:06
  • Vumhzubr
    Gloomy tales <a href=" http://www.wikio.com/user/lysiymu/bio ">auast...
    by Vumhzubr(匿名) on 2010/3/21 3:40:59
  • Utyyatac
    Best Site good looking <a href=" http://www.wikio.com/user/lysiymu/bio "&am...
    by Utyyatac(匿名) on 2010/3/21 2:49:04
  • Tzktrwua
    Best Site good looking <a href=" http://www.wikio.com/user/hoitugisidyf/bio &quo...
    by Tzktrwua(匿名) on 2010/3/21 2:17:04
  • Dvpzvkap
    real beauty page <a href=" http://www.wikio.com/user/hoitugisidyf/bio "&...
    by Dvpzvkap(匿名) on 2010/3/21 1:24:37
  • Dvpzvkap
    real beauty page <a href=" http://www.wikio.com/user/hoitugisidyf/bio "&...
    by Dvpzvkap(匿名) on 2010/3/21 1:24:03
  • Dvpzvkap
    real beauty page <a href=" http://www.wikio.com/user/hoitugisidyf/bio "&...
    by Dvpzvkap(匿名) on 2010/3/21 1:23:38
  • Lrukspmj
    Good crew it's cool :) <a href=" http://www.wikio.com/user/kaujifiery/bio "...
    by Lrukspmj(匿名) on 2010/3/21 0:51:57
  • Lcpyyivn
    this post is fantastic <a href=" http://www.wikio.com/user/kaujifiery/bio "...
    by Lcpyyivn(匿名) on 2010/3/20 23:58:25
  • Kdummuaj
    good material thanks <a href=" http://www.wikio.com/user/kiheqaqur/bio "&am...
    by Kdummuaj(匿名) on 2010/3/20 23:26:32

广告

 

前一篇博客 IP to Integer 提供的 SQL 函数是 IP 转换成 Integer 的方法。 Integer 的最大值为: 2147483647(2^31 - 1)。按照 IP 转换成整数的算法,会算出来大于这个值的,所以之前提供的 IP 转换成 Integer 的方法会算出负值。

下面是 IP to BigInt 的转换算法, 这时候运算就不会小于零。

CREATE FUNCTION dbo.ipStringToBigInt 
( 
    @ip CHAR(15) 
) 
RETURNS bigint 
AS 
BEGIN 
    DECLARE @rv bigint, 
        @o1 bigint, 
        @o2 INT, 
        @o3 INT, 
        @o4 INT
 
    SELECT 
        @o1 = CONVERT(INT, PARSENAME(@ip, 4)), 
        @o2 = CONVERT(INT, PARSENAME(@ip, 3)), 
        @o3 = CONVERT(INT, PARSENAME(@ip, 2)), 
        @o4 = CONVERT(INT, PARSENAME(@ip, 1)) 
 
    IF (@o1 BETWEEN 0 AND 255) 
        AND (@o2 BETWEEN 0 AND 255) 
        AND (@o3 BETWEEN 0 AND 255) 
        AND (@o4 BETWEEN 0 AND 255) 
    BEGIN      
 
        SET @rv = (@o1 * 16777216)  +  
            (@o2 * 65536) +  
            (@o3 * 256) + 
            (@o4) 
    END 
    ELSE 
        SET @rv = -1 
    RETURN @rv 
END
go 



CREATE FUNCTION dbo.ipBigIntToString 
( 
    @ip bigint 
) 
RETURNS CHAR(15) 
AS 
BEGIN 
    DECLARE @o1 INT, 
        @o2 INT, 
        @o3 INT, 
        @o4 INT 
 
    IF @ip > 4294967295 RETURN '255.255.255.255' 
    IF @ip <= 0 RETURN '0.0.0.0' 
 
    SET @o1 = @ip / 16777216
 
    SET @ip = @ip % 16777216 
    SET @o2 = @ip / 65536 
    SET @ip = @ip % 65536 
    SET @o3 = @ip / 256 
    SET @ip = @ip % 256 
    SET @o4 = @ip 
 
    RETURN 
        CONVERT(VARCHAR(4), @o1) + '.' + 
        CONVERT(VARCHAR(4), @o2) + '.' + 
        CONVERT(VARCHAR(4), @o3) + '.' + 
        CONVERT(VARCHAR(4), @o4) 
END

go 

-- 调用例子
select dbo.ipBigIntToString(3708279131)
select dbo.ipStringToBigInt('221.7.217.91')

打印 | 张贴于 2010-02-02 11:22:53 | Tag:数据库开发管理心得

留言反馈

暂时没有留言纪录

发表留言

标题
姓名
邮件
主页
留言 

Powered by: Joycode.MVC引擎 0.5.2.0