В postgresql (9.6), учитывая пользовательский ввод переменной длины типа «Алиса Чаплин» или «Алиса» или «Алиса Чаплин Мейер», но также и «Лик Чапл», я хотел бы искать записи, которые содержат «Алиса» в столбце имя ИЛИ фамилия столбца (И содержать «чаплин» в имени ИЛИ фамилии (И содержать «мейер» в имени ИЛИ фамилии)) и т. д.
Я решил использовать ILIKE %searchterm%
для сопоставления, поэтому запрос, предположительно, будет примерно таким:
... where
((lastname ILIKE '%' || SEARCHTERM1 || '%') OR (firstname ILIKE '%' || SEARCHTERM1 || '%'))
AND ((lastname ILIKE '%' || SEARCHTERM2 || '%') OR (firstname ILIKE '%' || SEARCHTERM2 || '%'))
AND etc.
После множества попыток и поиска ничего не появляется, что решает эту проблему... В крайнем случае я напишу очень процедурную функцию pgplsql, которая зацикливается на разделенной строке поиска, пересекая результаты ILIKE
, но должны быть еще какие-то идиоматические SQL-способ решения такой заурядной проблемы.
FROM q, unnest(string_to_array(q, ' ')) AS word)
(я не думаю, что у меня достаточно баллов, чтобы отредактировать ваш вопрос в строке, чтобы упростить его) {Примечание для будущих читателей комментариев выше: они относятся к предыдущей версии ответа @joanolo, который был совершенно другим.} 13.02.2017