MySQL LIKE模式匹配返回空集时应该返回值

时间:2014-11-22 02:34:36

标签: mysql sql wildcard sql-like

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

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。

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

我的查询有什么问题?

2 个答案:

答案 0 :(得分:3)

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

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

编辑:

对于那些没有彻底阅读文档的人,文档说:

  

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

     

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

此列表中包含[]等功能列表。 LIKE的标准只有两个通配符,%_

答案 1 :(得分:1)

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