【问题标题】:SQL, putting together LIKE queriesSQL,将 LIKE 查询放在一起
【发布时间】:2018-09-26 07:41:31
【问题描述】:
SELECT name
FROM TV
WHERE name LIKE '%Day%'
AND name NOT LIKE '%Days%'
            AND name NOT LIKE '%Hayday%'
            AND name NOT LIKE '%Payday%'
            AND name NOT LIKE '%Doomsday%'

如何合并最后 3 个查询,以使“day”这个词不包含在任何词中,除了一个词本身?

【问题讨论】:

  • 你使用的是 MySQL 还是 SQLite?

标签: mysql sql sqlite


【解决方案1】:

如果您使用的是 MySQL,则可以使用 RLIKE (REGEXP) 通过创建带有单词边界的表达式来仅匹配单词本身:

SELECT name
FROM TV
WHERE name REGEXP '[[:<:]]Day[[:>:]]'

请注意,REGEXP 不区分大小写,因此它也将匹配单词“day”。

如果您使用的是 SQLite,您可能安装了 REGEXP,在这种情况下,此解决方案也应该适用于您。如果没有,this question 会提供有关如何安装它的指导。

【讨论】:

  • 而且使用LIKE 的其他答案都无法完成您的查询。可以添加注释REGEXP 不区分大小写。
  • @TimBiegeleisen 确实如此。不幸的是,SQLite 默认没有安装 REGEXP。
  • 不...但它也可能支持REGEXP,即使在这种情况下,它仍然可以帮助您回答。
【解决方案2】:

空格是字符串的一部分...假设您在短语中进行搜索, 或者在它的开头或结尾。这是一个简单的案例解决方案,假设没有标点符号,只有文本和空格。 那么解决方案应该是这样的:

SELECT name
FROM Track
WHERE name (name  LIKE '% Day %') OR (name  LIKE '% Day') OR (name  LIKE 'Day %')
;

【讨论】:

  • 会错过“另一次”。
  • 怎么会? (无论如何,这个问题被编辑为搜索“天”......)
  • 仍然无法匹配“另一天”。
  • 为什么?它要么在 y 之后有一个空格,要么根本没有字符
  • 谁能说没有标点符号,正如@jarlh 在他的原始评论中指出的那样?
【解决方案3】:

在您的查询中,您可以直接给出字符串 like 而不是“Like”关键字 "where name ='time'

【讨论】:

    【解决方案4】:

    您可以使用 FIND_IN_SET

    SELECT name
    FROM Track
    WHERE name LIKE '%Time%'
    AND FIND_IN_SET(name,"Times,Playtime,Summertime,Wartime")<0
    

    【讨论】:

      【解决方案5】:

      假设“单独”是指被空格包围,那么最简单的方法可能是:

      SELECT name
      FROM TV
      WHERE ' ' || name || ' ' LIKE '% Day %';
      

      (或者你的数据库会进行字符串连接。)

      如果“单独”仅仅意味着一个词的边界,那么正则表达式是最好的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-03
        • 1970-01-01
        • 1970-01-01
        • 2013-06-15
        • 2018-09-18
        • 2017-08-15
        • 2023-04-09
        • 2016-08-30
        相关资源
        最近更新 更多