在postgresql数据库中搜索包含特定单词的字符串

时间:2018-03-09 12:09:05

标签: sql string postgresql sql-like

我希望查询一个充满字符串的postgresql数据库,特别是对于带有' LOVE' in - 这意味着只有这个单词的特定版本,没有爱是词干或在另一个词内有字符序列。到目前为止,我一直在使用SELECT * FROM songs WHERE title LIKE '%LOVE%';,它主要返回所需的结果。

但是,它还会返回CRIMSON AND CLOVERLOVESTONED/I THINK SHE KNOWS (INTERLUDE)LOVER YOU SHOULD'VE COME OVERTO BE LOVED等结果,我想将其排除,因为它们特别是单词'LOVE'

我知道您可以使用SELECT * FROM songs WHERE title = 'LOVE';,但这显然会遗漏任何不完全'LOVE'的字符串。 postgresql中是否有可以返回我需要的结果的操作?

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式查找love之前或之后的空格,或者该单词是否位于字符串的开头或结尾:

with songs (title) as (
  values 
     ('Crimson And Clover'),
     ('Love hurts'),
     ('Only love can tear us apart'),
     ('To be loved'),
     ('Tainted love')
)
select *
from songs 
where title ~* '\mlove\M';

~*是正则表达式运算符,并使用不区分大小写的比较。 \m\M restrict匹配单词的开头和结尾。

返回:

title                      
---------------------------
Love hurts                 
Only love can tear us apart
Tainted love               

在线示例:http://rextester.com/EUTHKM33922