Если я правильно понимаю, вы можете использовать position()
и order by
, чтобы приблизиться к тому, что вы хотите
order by position(' ' || @search_pattern, ' ' || sentence)
Если вы хотите отфильтровать данные, вы можете разбить предложение на слова ипосмотрите на каждого из них:
select *
from (values ('a abc def asdfdsf. kljkj')) v(sentence) cross join lateral
regexp_split_to_array(sentence, '[^\w]+') words
where words[1] like @pattern || '%' or
words[2] like @pattern || '%' or
words[3] like @pattern || '%' or
sentence like @pattern || '%'