запрос регулярного выражения postgres для соответствия шаблону с несколькими строками - PullRequest
0 голосов
/ 22 ноября 2018

Запрос postgres выбирает elements, у которого есть столбец name, содержащий любые строки из массива:

select "elements".* from "elements" where "elements"."name" ~* 'hap|bir'

Это работает хорошо.

Теперь, что такое шаблон регулярного выражения для выбора элементов, только если столбец содержит каждые строки массива (в произвольном порядке)?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вот шаблон регулярного выражения для выбора elements, только если столбец содержит все строки массива (в произвольном порядке):

select "elements".* from "elements" where "elements"."name" ~* '(?=.*?(hap))(?=.*?(bir))'

из здесь .

0 голосов
/ 22 ноября 2018

Ваш запрос выдает тот же результат, что и в следующем выражении без регулярного выражения LIKE с использованием массива

SELECT * 
  FROM elements 
WHERE lower(name) LIKE ANY(ARRAY['%hap%', '%bir%']);

Таким образом, чтобы выбрать из элементов, только если столбец содержит все строки массива, вы изменяетеэто от ANY до ALL

SELECT * 
  FROM elements 
WHERE lower(name) LIKE ALL(ARRAY['%hap%', '%bir%']);

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...