【问题标题】:MySQL LIKE pattern matching returning empty set when it should be returning valuesMySQL LIKE 模式匹配在应该返回值时返回空集
【发布时间】:2015-01-20 07:28:16
【问题描述】:

我有一个如下结构的表格(真实数据替换为虚拟数据):

tableName 
+-----------+----------------+
| code      | description    |
+-----------+----------------+
| A         | text here      |
| b         | blah blah      |
| c         | sdfsdfsdfsdf   |
| d         | sdfsfkaljdaklj |
| e         | asdkjasdlkjasd |
| f         | adskljalkdj    |
| g         | asdjalkd       |
| h         | askdjavsd      |
+-----------+----------------+

我正在尝试执行以下命令:

SELECT * FROM tableName WHERE description LIKE '__[aeiou]%';

我希望这个 select 语句从表中返回描述中第三个字符是 a、e、i、o 或 u 的所有结果。

但是,关于查询我得到 0 个结果。我知道表中存在与此模式匹配的有效结果(第 3 个字符是 a、e、i、o 或 u)。

我的查询有什么问题?

【问题讨论】:

  • 我不认为 mysql LIKE 接受范围 [] 所以它将它解释为以 [. 开头的文字字符串
  • 来自您的链接The other type of pattern matching provided by MySQL uses extended regular expressions. When you test for a match for this type of pattern, use the REGEXP and NOT REGEXP operators

标签: mysql sql wildcard sql-like


【解决方案1】:

使用正则表达式而不是 SQL Server 样式 LIKE 模式:

SELECT *
FROM tableName
WHERE description REGEXP '^..[aeiou].*$';

编辑:

对于那些没有仔细阅读文档的人,文档说:

MySQL 提供的另一种模式匹配使用扩展 常用表达。当您测试这种类型的匹配时 模式,使用 REGEXP 和 NOT REGEXP 运算符(或 RLIKE 和 NOT RLIKE,是同义词)。

以下列表描述了扩展正则的一些特征 表达式:

功能列表,例如 [] 在此列表中。 LIKE 的标准只有两个通配符,%_

【讨论】:

  • 嗨,恐怕我不明白为什么LIKE 在文档中声称支持此功能时不起作用? dev.mysql.com/doc/refman/5.0/en/pattern-matching.html
  • @Prefix 。 . .更仔细地阅读文档。支持的功能列表在这句话之后:“以下列表描述了扩展正则表达式的一些特征:”——这些使用REGEX
  • 啊,这就解释了 :) 抱歉,辛苦了一天。
  • @Prefix 是 RLIKE 或 REGEXP(不是“REGEX”)。
【解决方案2】:

在 MySQL 中,'_' 字符不是扩展正则表达式类的一部分,因此不能这样使用。使用 RLIKE 使用正则表达式

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    相关资源
    最近更新 更多