+ -
当前位置:首页 → 问答吧 → 一个关于IP查询的SQL语句

一个关于IP查询的SQL语句

时间:2011-12-12

来源:互联网


有这样的张表结构
我现在有一个IP:211.136.168.140
我想查询它属于哪个ISP,这个查询语名怎么写。。。

作者: ph550873328   发布时间: 2011-12-12

拆分了再匹配。

作者: fredrickhu   发布时间: 2011-12-12

SQL code
哦 不需要

select
 * 
from
 tb 
where
 replace(@ip,'.','') 
between
 ltrim(ip_start_one)+ltrim(ip_start_two)+ltrim(ip_start_three) 
and
 ltrim(ip_end_one)+ltrim(ip_end_two)+ltrim(ip_end_three)

作者: fredrickhu   发布时间: 2011-12-12

改结构吧
ip1 ip2 intip1 intip2 ISP
58.211.0.1 58.211.1.0 986906625 986906880 电信
.......

intip1=256*256*256*58+256*256*211+256*0+1  
intip2=256*256*256*58+256*256*211+256*0+1


select ISP from table where intip>=intip1 and intip<=intip2

作者: arrow_gx   发布时间: 2011-12-12

改结构吧
ip1 ip2 intip1 intip2 ISP
58.211.0.1 58.211.1.0 986906625 986906880 电信
.......

intip1=256*256*256*58+256*256*211+256*0+1  
intip2=256*256*256*58+256*256*211+256*1+0

select ISP from table where intip>=intip1 and intip<=intip2

作者: arrow_gx   发布时间: 2011-12-12

SQL code
select top 1 * from tb 
where replace(@ip,'.','')*1 between
 ltrim(ip_start_one)+ltrim(ip_start_two)+ltrim(ip_start_three)+ ltrim(ip_start_four)
and
 ltrim(ip_end_one)+ltrim(ip_end_two)+ltrim(ip_end_three)+ltrim(ip_end_four)
order by  ltrim(ip_start_one)+ltrim(ip_start_two)+ltrim(ip_start_three)+ ltrim(ip_start_four)*1,
 ltrim(ip_end_one)+ltrim(ip_end_two)+ltrim(ip_end_three)+ltrim(ip_end_four)

作者: ssp2009   发布时间: 2011-12-12

改结构吧,效率会提高很多的

file data
ip1 58.211.0.1 
ip2 58.211.1.0 
intip1 986906625 
intip2 986906880 
ISP 电信
.......

intip1=256*256*256*58+256*256*211+256*0+1  
intip2=256*256*256*58+256*256*211+256*1+0

转化 211.136.168.140 为 int
intip=256*256*256*211+256*256*136+256*168+140

select ISP from table where intip>=intip1 and intip<=intip2

作者: arrow_gx   发布时间: 2011-12-12