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)