查找范围之间的IP(IPv4和IPv6)地址

问题描述 投票:4回答:1

问题:当数据存储在VARBINARY数据类型中时,是否可以搜索介于两者之间的值(即,BETWEEN,大于和小于类型数学运算符)?

问题:我有一个IP地址列表(IPv4和IPv6),我需要确定该IP地址的地理位置,这意味着我需要在范围之间进行搜索。

通常,这可以通过将地址转换为整数然后使用BETWEEN运算符来实现。但是,由于IPv6有效地超过了所有数字,十进制和整数相关的数据类型,因此在发布时,我似乎需要将数据存储在VARBINARY数据类型中。

我以前没有使用过这种数据类型,所以我不知道如何,或者甚至可能在值之间进行搜索。我的在线搜索没有发现任何点击,所以我在这里问。

注意:目前正在使用SQL Server 2014,但将为此项目迁移到SQL Server 2017。

c# sql-server ssis ipv6 ipv4
1个回答
3
投票

你的方法是正确的。

您可以使用VARBINARY运算符进行比较。

以下是MSDN群组中的批准答案。但是这个链接将来可能会被破坏,所以我也在下面粘贴查询。

查询:

DECLARE @b1 varbinary(16) = convert(varbinary(16), newid()),
        @b2 varbinary(16) = convert(varbinary(16), newid())
SELECT CASE WHEN @b1 > @b2 THEN '@b1 is bigger' ELSE '@b2 is bigger' END
© www.soinside.com 2019 - 2024. All rights reserved.