SQL如何查IP段

licdut 2003-10-13 01:21:23
在数据库中有一IP字段,字符型。请问如何才能查出某个IP段的记录。如从202.115.138.0至218.143.0.1的记录
...全文
82 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
licdut 2003-10-13
  • 打赏
  • 举报
回复
照你说的方法,我己解决问题了。再次感谢。
txlicenhe 2003-10-13
  • 打赏
  • 举报
回复
改一点点:
1:
create function getIP(@a varchar(15))
returns varchar(15)
As
begin
declare @s varchar(15)
set @s = ''
while charindex('.',@a) > 0
begin
set @s = @s + right('000' + left(@a,charindex('.',@a)),4)
set @a = right(@a,len(@a)-charindex('.',@a))
end
set @s = @s + right('000' + @a,3) -- 刚才漏了这一句
return @s
end

2:
WHERE dbo.getIP(IP字段) BETWEEN dbo.getIP(@begin) AND dbol.getIP(@End)



3:eg:
Select dbo.getIP('202.1.110.2')
---------------
202.001.110.002

(所影响的行数为 1 行)

txlicenhe 2003-10-13
  • 打赏
  • 举报
回复
1:建一个函数
create function getIP(@a varchar(15))
returns varchar(15)
As
begin
declare @s varchar(15)
set @s = ''
while charindex('.',@a) > 0
begin
set @s = @s + right('000' + left(@a,charindex('.',@a)),4)
set @a = right(@a,len(@a)-charindex('.',@a))
end
return @s
end

2:

WHERE dbo.getIP(IP字段) BETWEEN dbo.getIP(@begin) AND dbol.getIP(@End)



licdut 2003-10-13
  • 打赏
  • 举报
回复
你好,首先谢谢 txlicenhe(马可)给我的解答。
这是我第二次发此贴了。按这种方法替换有问题:如果IP中所有数字都是三位的话,这种方法没问题,但是有些数字不是三位。如202.115.138.0这种,最后只有一位:0,替换后查询结果不正确。
如查询:SELECT DstIp
FROM UrlLog
WHERE (REPLACE(DstIp, '.', '9') BETWEEN REPLACE('212.115.138.2', '.', '9') AND
REPLACE('212.115.138.6', '.', '9'))
则显示:
202.115.138.2
202.115.138.3
202.115.138.4
202.115.138.5
202.115.138.6
202.115.138.20
202.115.138.21
202.115.138.22
....
在最后一段中所有首位小于6的都会查出来。
txlicenhe 2003-10-13
  • 打赏
  • 举报
回复
declare @a varchar(15),@b varchar(15)
set @a = '202.115.138.0'
set @b = '218.143.0.1'
Select * from 表 where
replace(IP字段,'.','9') between replace(@a,'.','9') and replace(@b,'.','9')

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧