代码之家  ›  专栏  ›  技术社区  ›  Michael Samuel

在类似MYSQL的查询中忽略括号

  •  -2
  • Michael Samuel  · 技术社区  · 7 年前

    name
    ------
    Oppo A71 (2018)
    Plum Flipper (2018)
    Lenovo K5 Note (2018)
    Huawei Y9 (2018)
    Huawei Y7 (2018)
    

    2018 没有像这样的括号 samsung a8 2018 例如,而不是 samsung a8 (2018)

    SELECT * FROM phones WHERE name LIKE '% 2018 %'
    

    它不会返回任何结果,因为 2018

    如果我将查询切换到:

    SELECT * FROM phones WHERE name LIKE '%2018%'
    

    它将正确显示结果,但如果查询是字符串的一部分或返回数千个不相关的行,我不希望它与文本匹配。这些词必须是实际发现的词,而不是词的一部分。所以我一年四季都有空间。

    跑步有什么办法吗 LIKE 例如,将行与 (2018) 作为一个词?

    4 回复  |  直到 7 年前
        1
  •  5
  •   Gordon Linoff    7 年前

    一种方法是正则表达式。但与 like

    SELECT *
    FROM phones
    WHERE REPLACE(REPLACE(name, '(', ' '), ')', ' ') LIKE '% 2018 %'
    
        2
  •  3
  •   Michał Turczyn    7 年前

    您可以结合以下两个条件进行检查: OR 检查两种情况。尝试:

    SELECT * FROM phones 
    WHERE name LIKE '% 2018 %' OR
          name LIKE '%(2018)%'
    
        3
  •  2
  •   Nick SamSmith1986    7 年前

    您可以使用正则表达式将2018本身看作一个单词。只需在其周围使用“边界元素”一词:

    SELECT *
    FROM phones
    WHERE name REGEXP '[[:<:]]2018[[:>:]]'
    
        4
  •  1
  •   Evaldas Buinauskas    7 年前

    虽然Gordon Linoff提供的答案肯定会有用,但当数据集增长时,它不会有很好的表现,更好的方法是在表上使用全文搜索,这样可以更轻松地处理此类问题。