Ответ 1
Возможно, использование SIMILAR TO
будет работать?
SELECT * from table WHERE column SIMILAR TO '(AAA|BBB|CCC)%';
Есть ли более короткий способ поиска нескольких совпадений:
SELECT *
from table
WHERE column LIKE "AAA%"
OR column LIKE "BBB%"
OR column LIKE "CCC%"
Эти вопросы относятся к PostgreSQL 9.1, но если есть общее решение, это будет еще лучше.
Возможно, использование SIMILAR TO
будет работать?
SELECT * from table WHERE column SIMILAR TO '(AAA|BBB|CCC)%';
Использование массива или набор сравнений:
create table t (str text);
insert into t values ('AAA'), ('BBB'), ('DDD999YYY'), ('DDD099YYY');
select str from t
where str like any ('{"AAA%", "BBB%", "CCC%"}');
select str from t
where str like any (values('AAA%'), ('BBB%'), ('CCC%'));
Также возможно сделать AND
, что было бы нелегко с регулярным выражением, если бы оно соответствовало любому порядку:
select str from t
where str like all ('{"%999%", "DDD%"}');
select str from t
where str like all (values('%999%'), ('DDD%'));
Используйте LIKE ANY(ARRAY['AAA%', 'BBB%', 'CCC%'])
в соответствии с этим трюком @maniek, показанным ранее сегодня.
Вы можете использовать оператор регулярного выражения (~), разделенный (|), как описано в Pattern Matching
select column_a from table where column_a ~* 'aaa|bbb|ccc'
Следующий запрос помог мне. Вместо использования LIKE
вы можете использовать ~*
.
select id, name from hosts where name ~* 'julia|lena|jack';
Вы можете использовать IN, если вам на самом деле не нужны символы подстановки.
ВЫБРАТЬ * из таблицы ГДЕ столбец IN ("AAA", "BBB", "CCC")
SELECT * FROM TableName WHERE ColumnName LIKE '% Test%' ИЛИ ColumnName LIKE '% Test2%'