有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 @[email protected]
set @index=CHARINDEX( '. ',@ip)
set @Ip_1=left(@ip,@index-1)
set @ip=right(@ip,len(@ip)[email protected])
set @[email protected][email protected]_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 @[email protected][email protected]_1
end
else
set @[email protected][email protected]
return(@ipnum)
end
------解决方案--------------------
create function test(@ip varchar(50))
returns bigint
as
begin
declare @s varchar(50)
select @s= ' ',@[email protected]+ '. '
while charindex( '. ',@ip)> 0
begin
select @[email protected]+left(@ip,charindex( '. ',@ip)-1),
@ip=stuff(@ip,1,charindex( '. ',@ip), ' ')
end
return convert(bigint,@s)
end
select dbo.test( '202.12.34.60 ')