ILIKE Сопоставить границы слов PostgreSQL 9

При использовании оператора LIKE/ILIKE в PostgreSQL 9 возможно ли сопоставить границы слов без использования полномасштабных регулярных выражений оператора ~?

Например

SELECT 'Super fast training' ILIKE '%train\M%' as match; 

Где \M — это граница в конце слова, а match возвращает false.

Спасибо,

отметка


person Mark    schedule 06.08.2013    source источник


Ответы (2)


вы можете сделать это с помощью следующего трюка:

SELECT ' ' || 'Super fast training' ILIKE '%train %'

но я не думаю, так что это хорошая идея. Вместо этого вы можете использовать регулярное выражение или полный текст PostgreSQL. Регулярные выражения PostgreSQL не намного медленнее, чем ILIKE или LIKE.

person Pavel Stehule    schedule 06.08.2013

В моем случае помогает:

WITH phrase_to_match AS (
  SELECT 'Super fast training' AS phrase
  UNION ALL
  SELECT 'Super fast train' AS phrase
)

SELECT ' ' || phrase || ' ' ILIKE '% train %'
FROM phrase_to_match

Пробелы в начале и конце фразы и совпадения фразы необходимы. Это не работало правильно без пробелов.

Этот пример работает быстрее, чем когда мы используем оператор ~*.

P.S.: Спасибо https://stackoverflow.com/a/29798772/2997850

person Stepan Zakharov    schedule 05.11.2017