Сортировка по положению слова (индексу слова) в предложении с использованием SQL - PullRequest
0 голосов
/ 16 июня 2019

Можно ли выбирать предложения по их позиции (индексу) соответствующего слова в SQL?

Я имею в виду запрос на выборку, подобный следующему:

  • Поиск предложений, соответствующих шаблону поискав начале первого слова
  • Найти предложения, соответствующие шаблону поиска, в начале второго слова
  • Найти предложения, соответствующие шаблону поиска, в начале третьего слова
  • Найтипредложения, которые соответствуют шаблону поиска в любом другом месте предложения.

В этом случае приветствуются любые примеры.

С уважением

Ответы [ 2 ]

2 голосов
/ 16 июня 2019

Если я правильно понимаю, вы можете использовать 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 || '%'
1 голос
/ 16 июня 2019

Вы можете попробовать использовать регулярные выражения Postgres. Например, чтобы найти шаблон в начале второго слова, вы можете использовать:

select *
from your_table
where sentence ~ '^\w+\s+\ypattern';

В общем, чтобы найти шаблон в начале N-го слова, вы можете использовать:

select *
from your_table
where sentence ~ '^(?:\w+\s+){n-1}\ypattern';

Демо

...