在 postgresql 数据库中搜索包含特定单词的字符串
Search postgresql database for strings contianing specific words
我想查询一个充满字符串的 postgresql 数据库,特别是带有单词 'LOVE' 的字符串 - 这意味着只有这个单词的特定版本,而不是爱是词干或有那个另一个词中的字符序列。到目前为止,我一直在使用 SELECT * FROM songs WHERE title LIKE '%LOVE%';
,这主要是 return 想要的结果。
但是,它也有 return 的结果,例如 CRIMSON AND CLOVER
、LOVESTONED/I THINK SHE KNOWS (INTERLUDE)
、LOVER YOU SHOULD'VE COME OVER
和 TO BE LOVED
,我想排除它们,因为它们是特定的'LOVE'
这个词。
我知道您可以使用 SELECT * FROM songs WHERE title = 'LOVE';
,但这显然会漏掉任何不完全是 'LOVE'
的字符串。 postgresql有没有可以return我需要的结果的操作?
您可以使用正则表达式来查找 love
之前或之后带有 space,或者如果单词位于字符串的开头或结尾:
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匹配到单词的开头和结尾。
returns:
title
---------------------------
Love hurts
Only love can tear us apart
Tainted love
我想查询一个充满字符串的 postgresql 数据库,特别是带有单词 'LOVE' 的字符串 - 这意味着只有这个单词的特定版本,而不是爱是词干或有那个另一个词中的字符序列。到目前为止,我一直在使用 SELECT * FROM songs WHERE title LIKE '%LOVE%';
,这主要是 return 想要的结果。
但是,它也有 return 的结果,例如 CRIMSON AND CLOVER
、LOVESTONED/I THINK SHE KNOWS (INTERLUDE)
、LOVER YOU SHOULD'VE COME OVER
和 TO BE LOVED
,我想排除它们,因为它们是特定的'LOVE'
这个词。
我知道您可以使用 SELECT * FROM songs WHERE title = 'LOVE';
,但这显然会漏掉任何不完全是 'LOVE'
的字符串。 postgresql有没有可以return我需要的结果的操作?
您可以使用正则表达式来查找 love
之前或之后带有 space,或者如果单词位于字符串的开头或结尾:
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匹配到单词的开头和结尾。
returns:
title
---------------------------
Love hurts
Only love can tear us apart
Tainted love