like子句不像MySQL SQL中所说的那样工作

时间:2014-08-26 03:07:29

标签: mysql sql regex sql-like

我有一张桌子,比如 创建表table1( name varchar(32), );

其中有一些数据。当我这样选择时: select * from table1,其名称如'Jack2%';

会有Jack2。

但如果我选择这样: select * from table1,其名称如'Jack [0-9]%'; 什么都没有;

我也尝试过regexp替代,但它也没有用!

怎么了?

3 个答案:

答案 0 :(得分:2)

您已经混淆了两种不同的模式匹配机制。 SQL LIKE使用%来匹配任何内容,使用_来匹配任何单个字符;它没有[0-9]之类的匹配数字。这看起来像是正则表达式中的字符类。

标准SQL根本不支持正则表达式,但MySQL确实如此 - 您只需使用RLIKE(或REGEXP,但这并不能很好地读取IMO)而不是LIKE。但这意味着您必须将%替换为正则表达式等效.*

SELECT * FROM table1 WHERE name RLIKE 'Jack[0-9].*';

答案 1 :(得分:1)

<强> Fiddle

<强> MySQL REGEX

select * from Table1 where `name` REGEXP 'Jack[0-9]'

答案 2 :(得分:1)

您可以改用RLIKE

SELECT * FROM table1 WHERE name RLIKE 'Jack[0-9].*';

请注意&#39;%&#39;操作员不能使用RLIKE,你必须使用正则表达式模式,如&#39;。*&#39;代替。