我想查询一个postgresql数据库,里面有很多字符串,特别是里面有“LOVE”这个词的字符串-这意味着只有这个词的特定版本,没有任何东西是LOVE的词干,或者在另一个词里面有这个字符序列。到目前为止,我一直在使用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中是否有可以返回我需要的结果的操作?

最佳答案

您可以使用正则表达式查找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';

~*是regex运算符,使用不区分大小写的比较。单词开头和结尾的匹配。
返回:
title
---------------------------
Love hurts
Only love can tear us apart
Tainted love

在线示例:restrict

10-08 19:42