当我使用方括号和%
通配符时,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
答案 0 :(得分:3)
虽然我不相信MySQL在[]
中使用常规LIKE
子句支持类似正则表达式的字符类(我也找不到relevant documentation),但MySQL确实有{{} 3}}您可以使用它来构建可比功能的正则表达式。
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
但要注意的一件事是:[{1}}使用lname
时可能会REGEXP
。{/ p>
n.b。我相信Here's a demonstration.与您的建议相似。
答案 1 :(得分:1)