日期:2014-05-17  浏览次数:20477 次

根据纯真IP库求查询ip地址的sql查询语句

上面的图片是数据库中的字段 类型都是 nvarchar类型
怎么写查询IP的sql语句呢 例如说 查询ip为“183.12.241.174”的SQL语句
SQL 数据库

------解决方案--------------------
有一次成型 写的话太复杂了 效率太低
在能修改数据库的基础上 给该表加2字段 StartIpInt和EndIpInt
然后把ip转换成数字存储进行
比如1.2.3.4这个ip可以转换成1*256*256*256+2*256*256+3*256+4这个值
跑一次就把数据库的记录全部更新了
然后你要查询的ip只需要转换成值对该2个字段进行搜索
比如183.12.241.174=183*256*256*256+12*256*256+241*256+174
------解决方案--------------------
同意楼上,转换成int,进行匹配
第一位做255*255*255往后依次类推 
------解决方案--------------------
当初你就可以直接存bigint
System.Net.IPAddress ip;
if(System.Net.IPAddress.TryParse(str, out ip)) 存ip.Address
------解决方案--------------------
还是不要自己做数据库了
我是用有道的
当然还有其他选择~
http://www.hujuntao.com/api/the-ip-address-api-and-call-the-interface-method.html
------解决方案--------------------
引用:
Quote: 引用:


上面的图片是数据库中的字段 类型都是 nvarchar类型
怎么写查询IP的sql语句呢 例如说 查询ip为“183.12.241.174”的SQL语句


转成int类型了 然后怎么比较啊
StartIP EndIP Country Local
22183936 22200319 陕西省宝鸡市 电信
22200320 22216766 陕西省西安市 电信
22216767 22216767 陕西省西安市 青田文化艺术传播有限公司
22216768 22254277 陕西省西安市 电信
22254278 22254278 陕西省西安市雁塔区 西安外国语大学
22254279 22307386 陕西省西安市 电信
22307387 22307387 陕西省西安市莲湖区 倩倩网络
22307388 22307532 陕西省西安市 电信

自己的IP 转换为了1901887483   然后怎么写SQL语句呢


where "+ intIP +" between ... and ..."

还是你自己写吧。
------解决方案--------------------
我不记得SQL Server时候会自动对between使用索引了。如果不能,那么你就应该写为
   where intStartIP<=" + intIP +" and intEndIP>="+ intIP
这一类的。并且确保先对 intStartIP 和 intEndIP 字段创建索引。

不要把原始的 StartIP 和 EndIP 字段给改了。保留这两个可读性强的字段,非常必要的。