【发布时间】:2014-08-19 19:24:47
【问题描述】:
我需要同时存储 IPv6 和 IPv4 地址,以便它们可以或多或少地使用 CIDR 表示法在 SQL Server DB 中进行排序和搜索。我打算使用二进制(16),将 IPv4 编码为 IPv4-mapped-IPv6,因此任何一个 IP 地址都有一个一致的表示。我可以以二进制形式导出适当的网络掩码以提供给查询。但是 SQL Server 只能在一个操作数是数字时执行按位运算。我显然不能对二进制(16)和 128 位值进行按位“&”。
我意识到我可以读取每一行并在代码中执行此操作,但我需要在数据库中进行此搜索,因为要搜索几百万个 IP。我看过大多数关于“存储”和在二进制和文本之间转换的帖子。但那些并没有解决我的问题。我的问题更多是关于 binary(16) 的二进制搜索。
在 SQL Server 中对二进制 (16) 字段进行 CIDR 搜索的最佳方法是什么?
【问题讨论】:
标签: sql-server-2012 ip-address bitwise-operators binary-data cidr