Сведения о вопросе

Ayrat

17:33, 1st August, 2020

Теги

SQL   PL/SQL    

Проверка вхождения IP адреса в диапазон средствами SQL или PL/SQL?

Просмотров: 308   Ответов: 2

Привет, други.


Подскажите пож-та, как средствами SQL (предпочтительно) или PL/SQL реализовать проверку вхождения конкретных IP адресов в тот или иной диапазон?


Проще говоря, надо определить, к какой подсети относится конкретный IP адрес:


Есть таблица ip_networks формата

RANGE_BEGIN RANGE_END RANGE_NAME<br/>
10.160.1.0 10.160.1.125 MSK<br/>
10.160.1.126 10.160.1.254 SPB



… и таких еще много…


и нужно выводить в select-запрос значение поля RANGE_NAME для каждого IP адреса из длинного списка.


В голове крутится что-то очень длинное с использованием BETWEEN, FOR и CASE, но подозреваю, что эта задача как-то элементарнее должна решаться…


Очень на вас надеюсь…



  Сведения об ответе

SKY

14:47, 8th August, 2020

Если поля имеют тип inet, то так:

SELECT * FROM ips WHERE inet '10.160.1.15' >= RANGE_BEGIN AND inet '10.160.1.15' <= RANGE_END ;


  Сведения об ответе

PHPH

12:36, 26th August, 2020

Ну сколько можно!

Делаете ip — unsigned int
запись — нижний ip из диапазона
выборку — первый из отсортированного списка по возрастанию, больше или равен нижнему ip из диапазона
при этом хорошо и быстро используется индекс

Если mysql с этим справляете, то oracle должен также отлично работать

единственный недостаток — нужно незанятые блоки также прописывать, но это оффлайновая операция и делается просто.
Правда для отдельного региона будет их много. Для world wide будет все просто отлично.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться