参见 http://community.csdn.net/Expert/topic/3084/3084173.xml?temp=.6875269 对IP地址的说明,下面使用的函数在该链接中,查询如下, UInt32 uintIpAddr=ParseIPAddress("192.168.0.1");再构造SQL语句 SELECT Address FROM YourTableName WHERE IP1>=uintIpAddr AND IP2<=uintIpAddr 上面查询使用的前提是你需要将表结构进行改变,如下 lngIP1 long lngIP2 long txtAddress text然后将原来数据导入新表,有两种方法, 1.你需要写一个变换函数来做这件事,变换如下:新表.lngIP1=ParseIPAddress(旧表.IP1) 新表.lngIP2=ParseIPAddress(旧表.IP2) 新表.txtAddress=旧表.Address2.到网上下载一个具有该表结构的IP地址数据库
where (@input_ip>substring(IP1,11,1) and (@input_ip<substring(IP2,11,3)
IP1 IP2 ADDRESS211.67.134.31 211.67.136.255 河南省郑州市
上面这种两个部分不同的情况,楼上的都无法解决,
我如果想查'211.67.135.88',我使用 select * from table1 where ip1 like '211.67.%.%' and ip1<='211.67.135.88'and ip2>='211.67.135.88'
可以得到地址 河南省郑州市 可以显示,但是可能出现干扰,比如211.67.0.0 211.67.15.255 湖北省武汉市 广播电视大学还是有问题啊
我给我得想法
string str = "61.150.82.120";
string[] iparray = str.split(".");int headlen = str.length - iparray[3].length;select ADDRESS from 表名
where right(Ip1,iparray[3].length) = iparray[3] and left(IP1,headlen) = left(str,headlen) and convert(int,iparray[3]) > convert(int,rigth(Ip1,iparray[3].length) and convert(int,iparray[3]) < convert(int,right(Ip2,iparray[3].length)
原理应该是这样。不过上面的SQL语句肯定不能直接用。只要把你面对应的参数添上就行了
如果是 211.67.135.88 呢?
http://community.csdn.net/Expert/topic/3084/3084173.xml?temp=.6875269
对IP地址的说明,下面使用的函数在该链接中,查询如下,
UInt32 uintIpAddr=ParseIPAddress("192.168.0.1");再构造SQL语句
SELECT
Address
FROM
YourTableName
WHERE
IP1>=uintIpAddr
AND
IP2<=uintIpAddr
上面查询使用的前提是你需要将表结构进行改变,如下
lngIP1 long
lngIP2 long
txtAddress text然后将原来数据导入新表,有两种方法,
1.你需要写一个变换函数来做这件事,变换如下:新表.lngIP1=ParseIPAddress(旧表.IP1)
新表.lngIP2=ParseIPAddress(旧表.IP2)
新表.txtAddress=旧表.Address2.到网上下载一个具有该表结构的IP地址数据库
from 西安天下网吧
where IP1 = '61.150.82.'
我看到一个软件,在TXT中搜索IP并获得地址。结构和我的ACCESS数据库一样的
IP1_1 IP1_2 IP1_3 IP1_4 IP2_1 IP2_2 IP2_3 IP2_4
61 150 82 100 61 150 82 167 西安天下网吧第二行是实际数据库中的列名
存和取的时候做处理,存的时候分开存,取的时候写几个多参数的查询(分别判断A、B、C类地址相同的情况)就行了,这样你的数据库查询就可以用了,用 between and