IP地址查询 急啊

aierduo 2007-01-28 10:13:18
表A中 有列 IP 保存的是ip地址 格式如下
IP
198.168.0.1
192.168.0.5
192.168.0.15
192.168.0.215
192.168.1.5
192.168.1.25
192.168.1.23
192.168.1.155
192.168.2.5
192.168.2.53
192.168.2.223
//////////
请问我想查询某个IP段之间(如192.168.0.1-192.168.0.255 是一个IP段 而 198.168.1.1-192.168.1.255 是另一个IP段)都有那些IP怎么写SQL语句?

假若我要查询 192.168.0.1-192.168.0.255 这个IP断那么就应该市
IP
198.168.0.1
192.168.0.5
192.168.0.15
192.168.0.215
...全文
445 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hrb2008 2007-01-29
  • 打赏
  • 举报
回复
select * from table
where [dbo].[FunCmpIp](ip) between startnumip and endnumip
hrb2008 2007-01-29
  • 打赏
  • 举报
回复
将ip转换成256位,然后查询。
CREATE FUNCTION [dbo].[FunCmpIp] (@startip varchar(40))
RETURNS decimal
AS
BEGIN
declare @i int --标记ip地址中的"."符号位置
declare @pw int --2进制的幂值
declare @ipvalue decimal--计算ip的二进制值
set @ipvalue=0
set @pw=3
--set @startip='192.168.0.1'
set @i=charindex('.',@startip)
while @i>=1
begin
--insert @temp values(replace(left(@startip,@i-1),' ',''))
set @ipvalue=@ipvalue+CAST(replace(left(@startip,@i-1),' ','') as decimal)*POWER(256,@pw)
set @startip=substring(@startip,@i+1,len(@startip)-@i)
set @i=charindex('.',@startip)
set @pw=@pw-1
end
set @ipvalue=@ipvalue+CAST(@startip as int)
return @ipvalue
END;
加入二decimal字段,startnumip,endnumip,
insert into table (startnumip,endnumip)
select [dbo].[FunCmpIp](startip),[dbo].[FunCmpIp](startip) from table
zxbyhcsdn 2007-01-29
  • 打赏
  • 举报
回复
转换成数字,还要没一个域要补足3位哟1!

比如说 192.168.0.3 就要弄成 192168000003
ReViSion 2007-01-28
  • 打赏
  • 举报
回复
如果要通用就先转化为数字吧
ReViSion 2007-01-28
  • 打赏
  • 举报
回复
加个条件不就行了呀

create table A(ip varchar(20))
insert A select '198.168.0.1'
union all select '192.168.0.5'
union all select '192.168.0.15'
union all select '192.168.0.215'
union all select '192.168.1.5'
union all select '192.168.1.25'
union all select '192.168.1.23'
union all select '192.168.1.155'
union all select '192.168.2.5'
union all select '192.168.2.53'
union all select '192.168.2.223'

select * from A
where ip like '192.168.0.%'
and cast(substring(ip,11,3) as tinyint) between 56 and 255
houyichong 2007-01-28
  • 打赏
  • 举报
回复
将最后面那个ip值转换为数字型就可以比较了
aierduo 2007-01-28
  • 打赏
  • 举报
回复
有没有别的办法嘛
这个字段是个varchar32的
真郁闷
marco08 2007-01-28
  • 打赏
  • 举报
回复
把IP转换成数值保存和查询
显示时把数值转换成IP
aierduo 2007-01-28
  • 打赏
  • 举报
回复
哥们 人呢
呵呵
查询我得有个起点阿
marco08 2007-01-28
  • 打赏
  • 举报
回复
--参考, 邹老大写的函数

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_IP2Int]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_IP2Int]
GO

--1. 字符串IP地址转换成IP数值函数。
CREATE FUNCTION dbo.f_IP2Int(
@ip char(15)
)RETURNS bigint
AS
BEGIN
DECLARE @re bigint
SET @re=0
SELECT @re=@re+LEFT(@ip,CHARINDEX('.',@ip+'.')-1)*ID
,@ip=STUFF(@ip,1,CHARINDEX('.',@ip+'.'),'')
FROM(
SELECT ID=CAST(16777216 as bigint)
UNION ALL SELECT 65536
UNION ALL SELECT 256
UNION ALL SELECT 1)a
RETURN(@re)
END
GO


/*===========================================================*/


if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_Int2IP]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_Int2IP]
GO

--1. 字符串IP地址转换成IP数值函数。
CREATE FUNCTION dbo.f_Int2IP(
@IP bigint
)RETURNS varchar(15)
AS
BEGIN
DECLARE @re varchar(15)
SET @re=''
SELECT @re=@re+'.'+CAST(@IP/ID as varchar)
,@IP=@IP%ID
from(
SELECT ID=CAST(16777216 as bigint)
UNION ALL SELECT 65536
UNION ALL SELECT 256
UNION ALL SELECT 1)a
RETURN(STUFF(@re,1,1,''))
END
GO
aierduo 2007-01-28
  • 打赏
  • 举报
回复
但是如果我还要查询192.168.0.56-192.168.0.255 就没法了
marco08 2007-01-28
  • 打赏
  • 举报
回复
create table A(ip varchar(20))
insert A select '198.168.0.1'
union all select '192.168.0.5'
union all select '192.168.0.15'
union all select '192.168.0.215'
union all select '192.168.1.5'
union all select '192.168.1.25'
union all select '192.168.1.23'
union all select '192.168.1.155'
union all select '192.168.2.5'
union all select '192.168.2.53'
union all select '192.168.2.223'

select * from A
where ip like '192.168.0.%'

--result
ip
--------------------
192.168.0.5
192.168.0.15
192.168.0.215

(3 row(s) affected)

aierduo 2007-01-28
  • 打赏
  • 举报
回复
恩 这确实也能查询192.168.0.1-192.168.0.255 这个IP断 的
但是如果我还要查询192.168.0.56-192.168.0.255 就没法了
marco08 2007-01-28
  • 打赏
  • 举报
回复
select * from A
where ip like '192.168.0.%'

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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