Как использовать LIKE в поле inet в Postgres

Мне нужно выполнить следующий запрос:

SELECT * FROM users WHERE ip LIKE '88.99.%';

Проблема в том, что тип данных inet, похоже, не поддерживает подстановочные знаки (по крайней мере, не так, как я использовал их в предыдущем запросе).

Что я хотел бы знать, так это то, будет ли разумным шагом преобразовать поле в строку перед указанием фильтра LIKE? (С другой стороны, это, вероятно, замедлило бы весь запрос, даже если бы сам подход был допустимым.)


person Aley    schedule 24.04.2013    source источник


Ответы (2)


Используйте операторов подсети для таких запросов. '88.99.0.0/16' должен это сделать:

SELECT * FROM users WHERE ip << inet '88.99.0.0/16';
person Jakub Kania    schedule 24.04.2013
comment
Спасибо. Любая идея о том, как использовать это в ORM, таких как SQLAlchemy? - person Azharullah Shariff; 21.04.2020

Другой вариант, который сработал для меня, если вы хотите выполнить сравнение строк, заключается в следующем:

SELECT * FROM users WHERE TEXT(ip) LIKE '88.99.%';

хотя это будет менее эффективно, чем «Как использовать LIKE в поле inet в Postgres< /а>».

Ссылка: https://www.postgresql.org/docs/8.2/static/functions-net.html

person Tom Jenkinson    schedule 31.05.2016
comment
Тип данных в данном случае — inet, старайтесь избегать приведения всех данных. - person Frank N Stein; 08.03.2018