varchar怎么解决?
我要查询的时候还是要转化成整形的阿?
而且是要表示一个范围
譬如说218。80。252。00-218。80。255。255
这个范围
用varchar来查询的时候岂不是很不方便!
bigint不好的,不能表示64位无整形

解决方案 »

  1.   

    create table ipinfo(id int identity(1,1)  primary key,begin_id varchar(15),end_id varchar(15))
    insert into ipinfo values('192.168.168.0','192.168.168.255')
    go
    create function num(@num varchar(15))
    returns decimal(12,0)
    as
    begin
    declare @a varchar(3),@j int,@b varchar(15)
    set @b=''
    set @j=1
    while(@j<=13)
    begin
    set @a=substring(@num,@j,charindex('.',@num,1)-1)
    set @j=@j+4
     if len(@a)=1 set @a = '00' + @a
     if len(@a)=2 set @a = '0' + @a
    set @b = @b + @a
    end
    return convert(decimal(12,0),@b)
    end
    go
    select * from ipinfo where dbo.num(end_id)>dbo.num('192.168.168.3') and dbo.num(begin_id)<dbo.num('192.168.168.86')drop table ipinfo
    drop function dbo.num
      

  2.   

    也可以将IP地址转换为BIGVARBINARY来存储,取数据时在进行一次转换。这样检索的效率要好些。
      

  3.   

    存储两个字段
    202.95.54.215
    202.95 存放一个字段
    54.215 存放一个字段有一定算法存入,可以参考动网论坛的算法。
    www.aspsky.net