使用SQL查询ip段(前三段不变)

2014-11-24 14:45:51 · 作者: · 浏览: 1
使用SQL查询ip段(前三段不变)
今天在查询数据的时候,突然要查指定IP范围内的IP总数,思考了一下,主要使用charindex和reverse,下面是详细的SQL语句
www.2cto.com
[sql]
DECLARE
@IP varchar(50),
@IPSub varchar(40),
@range varchar(10),
@beginIP varchar(50),
@endIP varchar(50),
@max int,
@min int,
@count int
SET @IP='62.145.88.0/24'
SET @range=right(@IP,charindex('.',reverse(@IP))-1)--获取第三个ip后的字符串
--PRINT @range
SET @IPSub= substring(@IP,0,len(@IP)-charindex('.',reverse(@IP))+2)--获取ip前三段字符串
SET @max=substring(@range,0,charindex('/',@range))--获取最大值,假装的
--PRINT @max
SET @min=substring(@range,charindex('/',@range)+1,len(@range)-charindex('/',@range))--获取最小值,假装的 www.2cto.com
--PRINT @min
IF @max<@min
begin
SET @beginIP=@IPSub+convert(varchar(5),@max)
SET @endIP=@IPSub+convert(varchar(5),@min)
PRINT @beginIP
PRINT @endIP
end
else
begin
SET @beginIP=@IPSub+convert(varchar(5),@min)
SET @endIP=@IPSub+convert(varchar(5),@max)
PRINT @beginIP
PRINT @endIP
end
SET @count=(SELECT count(*) FROM UserActivityLog where RemoteAddr
BETWEEN @beginIP AND @endIP)
PRINT @count
但是这方法也是有问题的,因为这里使用了字符串来查询,这里可以考虑使用
[sql]
parsename(@ip,4)*cast(16777216 as bigint)+parsename(@ip,3)*65536+
parsename(@ip,2)*256+parsename(@ip,1)
这个样子可以转化成数字来查询,准确度就会很高了