日期:2014-05-18  浏览次数:20519 次

求一条 将 点分十进制的IP地址转换为 数值 的SQL语句??
有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   语句   ,执行完成这个修改,谢谢



------解决方案--------------------
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
------解决方案--------------------
create function test(@ip varchar(50))
returns bigint
as
begin

declare @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)
end

select dbo.test( '202.12.34.60 ')