sqlserver根据IP获取地址的自定义函数

博客展示了根据已有IP数据库编写的自定义函数代码。该函数接收IP地址和类型参数,通过一系列计算和查询,根据不同类型返回对应格式的IP地址信息,若信息缺失或未匹配到则有相应处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据已有的IP数据库,写了一个自定义函数,代码如下:

其中引用了另外一个函数f_trimstr,具体代码请点击这里


CREATE    Function f_getipaddress(@address varchar(15),@kind tinyint)
--@kind不同,最后结果形式也不同,如果是国外IP,则只有一种形式,@kind只对国内IP有效
--@kind=1,省份+城市+ISP
--@kind=2,省份+城市
--@kind=3,省份
returns varchar(50)

AS

begin

declare @address11 varchar(3)
declare @address12 varchar(12)
declare @address21 varchar(3)
declare @address22 varchar(12)
declare @address31 varchar(3)
declare @address41 varchar(3)
declare @ip float
declare @ip1 float
declare @ip2 float
declare @ip3 float
declare @ip4 float
declare @country varchar(20)
declare @province varchar(20)
declare @city varchar(20)
declare @isp varchar(20)
declare @result varchar(50)

select @address = dbo.f_trimstr(@address)

select @address11 = left(@address,charindex('.',@address)-1)
select @address12 = right(@address,len(@address)-charindex('.',@address))
select @address21 = left(@address12,charindex('.',@address12)-1)
select @address22 = right(@address12,len(@address12)-charindex('.',@address12))
select @address31 = left(@address22,charindex('.',@address22)-1)
select @address41 = right(@address22,len(@address22)-charindex('.',@address22))

select @ip1 = cast(@address11 as float)*256*256*256
select @ip2 = cast(@address21 as float)*256*256
select @ip3 = cast(@address31 as float)*256
select @ip4 = cast(@address41 as float)
select @ip = @ip1 + @ip2 + @ip3 + @ip4


select Top 1 @country=country,@province=province,@city=city,@isp=isp from address1 where ip1 <=@ip and ip2 >=@ip order by (ip2-ip1) asc,province desc,city desc,isp desc
if @country is not null
 
 begin
 if @province is null
  select @province = ''
 if @city is null
  select @city = ''
 if @isp is null
  select @isp = ''
 if @country <> '中国'
  select @result = @country
 else
  begin
  if @kind = 1
   begin
   if @province='' and @city = '' and @isp = ''
    select @result = @country
   else
    select @result = @province + @city + @isp
   end
  else if @kind = 2
   if @province='' and @city=''
    select @result = '中国'
   else
    select @result = @province + @city
  else
   if @province=''
    select @result = '中国'
   else
    select @result = @province
  end
 end

else
 select @result = '未知地址'

return @result

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值