有IP地址查询表   IP   :   
  startIP   varchar       50     
  endIP     varchar       50       
  local     varchar       100   
其中 起始IP 和 结束IP 均为 点分十进制的IP地址 (如 202.12.34.56)
为了便于比较,我又在此表加了两项
  startIP   varchar       50     
  endIP     varchar       50 
  start     long          
  end       long
  local   varchar       100   
我想 通过SQL Server 把startIP 转换为 数值后保持到相应的start, endIP 转换为
end ,大家能否提供一条 sql 语句 ,执行完成这个修改,谢谢

解决方案 »

  1.   

    CREATE function ip_num(@ip varchar(50))
    returns float
    as
    begin
    declare @index int
    declare @Ip_1 int
    declare @flag int
    declare @ipnum float
    set @index=1
    set @flag=4
    set @ipnum=0
      while (@flag>1 )
    begin
    set @flag=@flag-1
    set @index=CHARINDEX('.',@ip)
    set @Ip_1=left(@ip,@index-1)
    set @ip=right(@ip,len(@ip)-@index)
    set @ipnum=@ipnum+@Ip_1*cast(power(256,@flag) as float)
    end 
    if charindex(':',@ip)<>0
    begin
    set @index=charindex(':',@ip)
    set @ip_1=left(@ip,@index-1)
    set @ipnum=@ipnum+@ip_1
    end
    else
    set @ipnum=@ipnum+@ip-1
    return(@ipnum)end
      

  2.   

    create function test(@ip varchar(50))
    returns bigint
    as
    begindeclare @s varchar(50)
    select @s='',@ip=@ip+'.'
    while charindex('.',@ip)>0
    begin
    select @s=@s+left(@ip,charindex('.',@ip)-1),
    @ip=stuff(@ip,1,charindex('.',@ip),'')
    end
    return convert(bigint,@s)
    endselect dbo.test('202.12.34.60')
      

  3.   

    谢谢楼上两位,不知道你们能否再提示下:如何调用这个这个函数以完成我的需求??因为数据量比较大,如何写比较提高效率,完成我的所有数据更新添加到对应的列中,??
     当然我自己也试着写写,因为我刚开始接触 sql,呵呵
      

  4.   

    大家给分析下,我试着用下面的语句怎么就完成所有的更新,为什么不需要循环,就自动更新所有??请各位朋友给予解释指导!
    use ipData
    go
    update dbo.ip 
    set startp=dbo.ip_num(startip),
       endp=dbo.ip_num(endip);
    go
    select * from ip