求一条 将 点分十进制的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 ')