其中有一些数据。当我这样选择时: select * from table1,其名称如'Jack2%';
会有Jack2。
但如果我选择这样: select * from table1,其名称如'Jack [0-9]%'; 什么都没有;
我也尝试过regexp替代,但它也没有用!
怎么了?
答案 0 :(得分:2)
您已经混淆了两种不同的模式匹配机制。 SQL LIKE
使用%
来匹配任何内容,使用_
来匹配任何单个字符;它没有[0-9]
之类的匹配数字。这看起来像是正则表达式中的字符类。
标准SQL根本不支持正则表达式,但MySQL确实如此 - 您只需使用RLIKE
(或REGEXP
,但这并不能很好地读取IMO)而不是LIKE
。但这意味着您必须将%
替换为正则表达式等效.*
。
SELECT * FROM table1 WHERE name RLIKE 'Jack[0-9].*';
答案 1 :(得分:1)
答案 2 :(得分:1)
您可以改用RLIKE
SELECT * FROM table1 WHERE name RLIKE 'Jack[0-9].*';
请注意'%'操作员不能使用RLIKE,你必须使用正则表达式模式,如'。*'代替。