【问题标题】:MYSQL WHERE LIKE StatementMYSQL WHERE LIKE 语句
【发布时间】:2013-04-04 11:55:44
【问题描述】:

我正在尝试在 mysql 语句中使用 LIKE 子句,如下所示:

SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956%'

'FilePath' 列内的数据匹配数据为:

C:\SCAN\Parker_Apple_Ben_20-10-1830\TEST

上面的 SQL 语句可以正常工作并拾取相关行,但是如果我将“\”字符添加到 LIKE 子句的末尾(如下所示),它不会正确拾取该行:

SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956\%'

有趣的是,如果我在 LIKE 子句的开头放置一个 '\' 字符(如下所示),它会很好地拾取该行 - 这让我感到困惑。

SELECT * FROM batches WHERE FilePath LIKE '%\Parker_Apple_Ben_20-10-1956%'

【问题讨论】:

    标签: mysql sql-like


    【解决方案1】:

    在 LIKE 中,_ 是一个匹配单个字符的通配符,因此需要转义才能正确匹配文字“_”而不是可能匹配任何内容。此外,您提到尝试将一个以 1830 结尾的字符串与一个以 1956 结尾的类似字符串匹配。最后,正如 J W 和 MySQL 文档所提到的,您需要两次转义反斜杠

    http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

    因为 MySQL 在字符串中使用 C 转义语法(例如,“\n” 代表换行符),您必须将您使用的任何“\”加倍 在 LIKE 字符串中。例如,要搜索“\n”,请将其指定为“\n”。 要搜索“\”,请将其指定为“\\”;这是因为 反斜杠被解析器剥离一次,当模式再次被剥离时 匹配成功,留下一个反斜杠进行匹配。

    试试

    SELECT * FROM batches 
    WHERE FilePath LIKE '%Parker\_Apple\_Ben\_20-10-1830\\\\%'
    

    http://sqlfiddle.com/#!2/3ce74/3

    【讨论】:

      【解决方案2】:

      在当前查询中添加\转义%,试试这个

      SELECT * FROM batches WHERE FilePath LIKE '%Parker\_Apple\_Ben\_20-10-1956\\\\%'
      

      要搜索“\”,请将其指定为“\\\\”;这是因为 反斜杠被解析器剥离一次,当模式再次被剥离时 匹配成功,留下一个反斜杠进行匹配。

      【讨论】:

        【解决方案3】:

        使用四重转义:

        SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956\\\\%'
        

        Explanation here

        【讨论】:

          【解决方案4】:

          您应该转义您的“\”字符。试试这个:

          SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956\\%'
          

          【讨论】:

          • 嗨,我之前也试过,但没有成功
          【解决方案5】:

          这是因为\%是MySQL中的转义字符,更多信息请参见以下内容:

          https://stackoverflow.com/a/881208/1666167

          【讨论】:

            【解决方案6】:

            您应该在 mysql 中转义特殊字符,如 \、'、_ 等,如 \\\'\_

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-10-17
              • 1970-01-01
              • 1970-01-01
              • 2020-09-27
              • 2016-09-13
              • 1970-01-01
              • 2014-05-26
              相关资源
              最近更新 更多