导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

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
...全文
393 点赞 收藏 14
写回复
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.%'
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告