【问题标题】:Search postgresql database for strings contianing specific words在 postgresql 数据库中搜索包含特定单词的字符串
【发布时间】:2018-03-09 12:09:04
【问题描述】:

我正在寻找一个充满字符串的 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中有没有可以返回我需要的结果的操作?

【问题讨论】:

    标签: sql string postgresql sql-like


    【解决方案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

    【讨论】:

    • 所以我试图运行这个 select * from song where title ~* ''\mlove\M'';我得到'无效的命令\mlove'。我是否还需要运行 with song (title) as ( values ... bit 来完成这项工作?
    • with 仅用于一些示例数据。有一个错字:我的查询中有太多 ' - 我已修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多