Поиск LIKE в PostgrSQL

SELECT * FROM "main_user" WHERE ((UPPER("main_user"."bio"::text) LIKE UPPER('we')))

Есть такой код и он находит в ячейке био есть конкретный текст 'we' но есть одна проблема

bio: 'We'

bio: 'We are Family'

В первом варианте алгоритм его находит но во втором нет

Как мне сделать так чтоб он находил это слово и в ячейке био не с одним а с множеством слов но именно по слову а не по корневой основе

Я знаю что есть %we% но они берут много мусора если будет допустим слово 'wear' он и его возьмет


Ответы (1 шт):

Автор решения: hedgehogues

Для того, чтобы найти точное слово "we" в поле bio, можно использовать регулярное выражение. Например, можно использовать следующее выражение:

SELECT * FROM "main_user" WHERE ("main_user"."bio"::text ~* '\mwe\M')

В этом запросе используется функция ~* (оператор "соответствует регулярному выражению"). Регулярное выражение \mwe\M означает "слово 'we'", где \m означает "начало слова", а \M означает "конец слова".

Помимо этого, можно также использовать функцию split_part() для разбиения текста на слова и поиска нужного слова в массиве слов. Пример запроса может выглядеть так:

SELECT * FROM "main_user" WHERE ('we' = any(string_to_array(split_part("main_user"."bio"::text, ' ', 2), ' ')))

В этом запросе функция split_part() разбивает текст на слова, разделенные пробелами, а затем преобразует этот массив слов в строку

→ Ссылка