当我将方括号和%通配符一起使用时,如下所示,MySQL不会选择任何以数字开头的记录.互联网上的许多示例都将其视为正确用法.有什么建议么?在字母(a-d)范围内也不起作用.我正在运行MySQL 3.2
SELECT * FROM customers WHERE lname LIKE '[0-9]%' ORDER BY lname ASC
要么
SELECT * FROM customers WHERE lname LIKE '[a-d]%' ORDER BY lname ASC
解决方法:
尽管我不认为MySQL在带有正LIKE子句的[]中不支持类似[-]的正则表达式字符类(我也找不到relevant documentation),但是MySQL确实具有REGEXP/RLIKE operator,您可以使用该结构构造正则表达式以实现可比的功能.
SELECT * FROM customers WHERE lname REGEXP '^[0-9]' ORDER BY lname ASC
SELECT * FROM customers WHERE lname REGEXP '^[a-d]' ORDER BY lname ASC
要构建类似于您使用的通配符模式的正则表达式,请从^开始将模式左固定,并使用与您建议的字符类相同的字符[0-9],[a-f].您不需要在其后跟随任何内容,因为%通配符将等效于在初始左定锚字母或数字后加上^ []的任何零个或多个字符的匹配.
当然,您可以将这些语句与逻辑OR组合在一起,或构建匹配任一情况的正则表达式.
SELECT * FROM customers WHERE lname REGEXP '^[a-d]|[0-9]' ORDER BY lname ASC