SQL语句查询IP段的方法
(2013-11-16 20:23:34)
标签:
sql查询ipit |
分类: 软件开发 |
数据库中有一个IP_talbe表,存储IP段和相对应的地址,里面有三列,分别是
IPstart, IPend, address.
在网页中获取用户的IP地址,然后在数据库中查询该用户所属的address;
这种数据结构的话,应该先把IP地址转换成数值,才能用 数值
比较查询。
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。
IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。
例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。
如果我们把ip地址看成 a.b.c.d,那么转成IP数值就是 d*2的0次方 +
c*2的8次方 + b*2的16次方 + a*2的24次方
为了实现IP
字符串转换成数值,要建一个字符串IP地址转换成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
CREATE
FUNCTION dbo.f_IP2Int(
@ip
char(15)
)RETURNS bigint
AS
BEGIN
END
GO
查询语句中就可以用这个函数了
select
address
from
IP_table
where
dbo.f_ip2int(IP) beween dbo.f_ip2int(IPstart) and
dbo.f_ip2int(IPend)
前一篇:十大前景行业