В PostgreSQL как совместить NOT IN и LIKE?

Как вы сочетаете NOT IN а также LIKE?

Давайте предположим, что у нас есть таблица, которая содержит столбец имен (что-то вроде "голубой сыр", "сыр гауда" и т. Д.), И я хочу выбрать все имена, которые не содержат "сыр", "молоко", " мясо'.

Насколько я понимаю, искать что-то, что не находится в массиве строк, которые вы используете NOT IN и передать струны

SELECT names FROM some_table NOT IN('cheese','milk','meat');

но как пройти

LIKE '%cheese%'

к этому?

1 ответ

Решение

Конструкция LIKE ANY (ARRAY[...]) кажется, чтобы удовлетворить ваши потребности;

craig=> SELECT a FROM (
           VALUES ('cheesy'), ('imilk'), ('donut'), ('pie'), ('avocado'), ('meaty')
        ) x(a) 
        WHERE NOT a LIKE ANY (ARRAY['%cheese%','%milk%','%meat%']);

    a    
---------
 cheesy
 donut
 pie
 avocado
(4 rows)

Вам нужны символы подстановки, если вы хотите использовать LIKE сюда. Если вы действительно хотите равенства, вы можете использовать:

NOT = ANY (...)
Другие вопросы по тегам