在范围内查找 IP(IPv4 和 IPv6)地址

Find IP (IPv4 and IPv6) address between range

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

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

通常,这可以通过将地址转换为整数然后使用 BETWEEN 运算符来实现。但是,由于 IPv6 有效地超过了所有与数字、小数和整数相关的数据类型,在这篇文章中,似乎我需要将数据存储在 VARBINARY 数据类型中。

我过去没有使用过这种数据类型,所以我不知道如何或者是否可能在值之间进行搜索。我在网上搜索没有找到任何结果,所以我在这里问。

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

你的做法是正确的。

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

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

查询:

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