Вашият прост случай може да бъде решен с проста заявка с помощта на ANY
конструкция и ~*
:
SELECT *
FROM tbl
WHERE col ~* ANY (string_to_array('The ships hung in the sky ... bricks don’t', ' '));
~*
е оператор за съвпадение на регулярен израз без значение за малките букви. Използвам това вместо ILIKE
така че можем да използваме оригинални думи във вашия низ, без да е необходимо да добавяме %
за ILIKE
. Резултатът е същият - с изключение на думите, съдържащи специални знаци:%_\
за ILIKE
и !$()*+.:<=>?[\]^{|}-
за модели на регулярни изрази. Може да се наложи да избягвате специални символи по един или друг начин, за да избегнете изненади. Ето функция за регулярни изрази:
- Escape функция за регулярен израз или LIKE шаблони
Но имам мъчителни съмнения, че това ще е всичко, от което се нуждаете. Вижте моя коментар. Подозирам, че се нуждаете от пълнотекстово търсене със съвпадащ речник за вашия естествен език, за да предоставите полезна основа на думи...
Свързано:
- IN срещу ANY оператор в PostgreSQL
- Варианти на ефективността на заявката като PostgreSQL LIKE
- Съвпадение на образец с LIKE, SIMILAR TO или регулярни изрази в PostgreSQL