使用SQL按句子中的单词位置(单词索引)排序

时间:2019-06-16 14:48:25

标签: sql postgresql select

是否可以通过SQL中匹配单词的位置(索引)选择句子?

我的意思是这样的选择查询:

  • 在搜索词开头查找与搜索模式匹配的句子 第一个字
  • 在开头查找与搜索模式匹配的句子 第二个字词
  • 在搜索结果中找到与搜索模式匹配的句子 第三个单词的开头
  • 查找与搜索模式匹配的句子 句子中的其他任何地方。

如果有的话,欢迎任何例子。

致谢

2 个答案:

答案 0 :(得分:2)

如果我的理解正确,您可以使用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 :(得分:1)

您可以尝试使用类似Postgres的正则表达式功能。例如,要在第二个单词的开头查找模式,可以使用:

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

通常,要在第N个单词的开头查找模式,可以使用:

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

Demo