当我使用带有 %
通配符的方括号时,MySQL 不会选择任何以数字开头的记录。 Internet 上的许多示例都说明这是正确的用法。有什么建议么?它也不适用于字母 (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
但是要记住一件事:MySQL will not be able to use any index使用 REGEXP
时,您可能在 lname
上。
注意我相信MS SQL Server supports a syntax与您的建议类似。
关于mysql - SQL 语句中的方括号 us 用于通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20820862/