当前位置:知识百问>百科知识>SQL语句查询IP段

SQL语句查询IP段

2024-10-01 04:06:04 编辑:join 浏览量:561

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)

标签:SQL,IP,语句

版权声明:文章由 知识百问 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.zhshbaiwen.com/article/370420.html
热门文章