博问上的一个问题

sql server 2个ip地址段如何between查询

和ip小于或者大于查询

提问者:Quert - 初学一级

 

 

Code
create function dbo.fn_IP(@ip varchar(15))  
returns bigint  
begin  
   
return parsename(@ip,4)*cast(16777216 as bigint)+parsename(@ip,3)*65536+parsename(@ip,2)*256+parsename(@ip,1)  
end 

declare  @tb table (id int,ip varchar(15))
insert @tb select 1,'10.210.128.207'
UNION ALL  select 2,'10.210.128.206'
UNION ALL  select 3,'10.210.128.205'
UNION ALL  select 4,'10.210.128.204'
UNION ALL  select 5,'10.210.128.203'
UNION ALL  select 6,'10.210.128.202'
UNION ALL  select 7,'10.210.128.201'

select id,ip,dbo.fn_IP(ip) from @tb
where dbo.fn_IP(ip) between  dbo.fn_IP('10.210.128.203')      and dbo.fn_IP('10.210.128.205')

 

 

 

 

ip地址转数值

 

ASP/Visual Basic代码
  1. Function ChangeIP(ip)  
  2.     strIP=Split(ip,".")  
  3.     ChangeIP=int(strIP(0))*16777216 + int(strIP(1)) *65536 + int(strIP(2))*256 +int(strip(3))  
  4. End Function   
SQL代码
  1. create function dbo.f_ip2int(  
  2. @ip char(15)  
  3. )returns bigint  
  4. as  
  5. begin  
  6.     declare @re bigint  
  7.     set @re=0  
  8.     select @re=@re+left(@ip,charindex('.',@ip+'.')-1)*id  
  9.         ,@ip=stuff(@ip,1,charindex('.',@ip+'.'),'')  
  10.     from(  
  11.         select id=cast(16777216 as bigint)  
  12.         union all select 65536  
  13.         union all select 256  
  14.         union all select 1)a  
  15.     return(@re)  
  16. end  

 

SQL代码
  1. create function dbo.fn_IP(@ip varchar(15))  
  2. returns bigint  
  3. begin  
  4.     return parsename(@ip,4)*cast(16777216 as bigint)+parsename(@ip,3)*65536+parsename(@ip,2)*256+parsename(@ip,1)  
  5. end  

 


 

posted @ 2008-12-25 09:12  roboth  阅读(244)  评论(1编辑  收藏  举报