Найти IP (IPv4 и IPv6) адрес между диапазонами - PullRequest
0 голосов
/ 19 февраля 2019

Вопрос: Можно ли искать значения, которые находятся между (т. Е. Между, более или менее, чем математические операторы типа) друг с другом, когда данные хранятся в типе данных VARBINARY?

Проблема: У меня есть список IP-адресов (как IPv4, так и IPv6), где мне нужно определить геолокацию этого IP-адреса, что означает, что мне нужно искать между диапазонами.

Как правило, это может быть достигнуто путем преобразования адреса в целое число, а затем с помощью оператора BETWEEN.Однако с IPv6, фактически превышающим все типы данных, связанные с числовыми, десятичными и целочисленными значениями, начиная с этой публикации, кажется, что мне нужно хранить данные в типе данных VARBINARY.

Я не использовал этот тип данных в прошлом, поэтому я не знаю, как или, если это вообще возможно, осуществлять поиск между значениями.Мои поиски в Интернете не показали никаких результатов, поэтому я спрашиваю здесь.

Примечание: в настоящее время используется SQL Server 2014, но для этого проекта будет выполнен переход на SQL Server 2017.

1 Ответ

0 голосов
/ 19 февраля 2019

Ваш подход правильный.

Вы можете использовать оператор 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
...