【问题标题】:Get exact match with LIKE - SQL/PHP获得与 LIKE 的完全匹配 - SQL/PHP
【发布时间】:2013-04-11 16:44:46
【问题描述】:

给定文字:

"Hello, I'm from Hell",
"Hello, I'm from Ell"

以及下面的 SQL 子句:

SELECT * FROM table WHERE text LIKE '%ell%'

我得到了上面的两个文本,但我不想同时得到两个文本,因为我正在寻找文本 “厄尔”而不是“地狱”

如果有人知道我的意思,你能帮帮我吗?

提前致谢!

编辑:

更好的例子

就像你想寻找“大”这个词,但它不能是“更大”或“最大”等任何其他词的一部分

【问题讨论】:

  • 你可能需要使用正则表达式
  • 你的意思是你想执行你的like语句区分大小写?
  • 不,不区分大小写。我想搜索单独的单词“ell”。我不想回到地狱,因为 ell 是地狱的一部分,如果你明白我的意思的话。

标签: php mysql sql sql-like


【解决方案1】:

您可以使用 MySQL Regex 单词边界匹配:

SELECT * FROM table WHERE text REGEXP '[[:<:]]ell[[:>:]]'

这匹配一个字符串,该字符串包含单词ell,两边都有单词边界。

【讨论】:

  • 谢谢!这就是我需要的!
  • 您是否使用多行文本(例如“123 hell hellhell”)测试了正则表达式?如果“文本”字段格式为多行文本,并使用上述语句,它仍然显示结果而不应该显示结果
  • 这对我的用例来说太慢了
  • @duhaime 如果这对您来说太慢了,您可能想要构建一个表以按标记进行索引。每次从存储文本 blob 的表中插入、更新或删除时,都必须更新索引,但这会很快。只有索引的初始创建会很慢。
  • @Paulpro 你能解释一下上面的查询吗?括号是什么意思,这里是冒号。以及它是如何工作的。 ?例如。我有大型数据库,可以说更多 100,000。但是我只有一些列值的起始字符和一些最后的字符..所以这个查询将如何适用..假设我必须按 sku 搜索,即12345678-abc-pqr-123 我只有一些起始数字和一些最后一个字符。 pqr-123。你能解释一下吗?
【解决方案2】:

你也可以搜索空间吗?

SELECT * 
FROM table 
WHERE text LIKE '% ell%'
OR text LIKE 'ell%' // needed if string starts with ell

【讨论】:

    【解决方案3】:

    你可以试试这个:

    SELECT * FROM table WHERE text LIKE BINARY '%ell%'
    

    【讨论】:

      【解决方案4】:

      选择完全匹配的不区分大小写

      SELECT * FROM 表 其中 LOWER(column) 像 BINARY LOWER('ell')

      如果文本有多行,它可以工作。

      【讨论】:

        【解决方案5】:

        您可以只在查询中使用 REGEXP。看看这个资源,它包含你需要的所有细节。

        语法简单如下

        $sql= "select * from post where title REGEXP '$s'";
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-16
          • 1970-01-01
          • 1970-01-01
          • 2019-04-04
          • 2011-02-14
          • 2011-01-10
          • 2015-07-02
          相关资源
          最近更新 更多