您的位置首页生活百科

SQL语句查询IP段

SQL语句查询IP段

的有关信息介绍如下:

SQL语句查询IP段

你这种数据结构的话,应该先把IP地址转换成数值,才能用 数值 比较查询。

IP协议规定IP总长度是32位的,所以每组是8位

如果我们把ip地址看成 a.b.c.d,那么转成IP数值就是

d*2的0次方 + c*2的8次方 + b*2的16次方 + a*2的24次方

为了实现IP 字符串转换成数值,要建一个函数。

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

-- 字符串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

查询语句中就可以用这个函数了

select address

from IP_table

where f_ip2int(IP_address) beween f_ip2int(IP_start) and f_ip2int(IP_end)