![](/img/trans.png)
[英]What is the difference between the backtick and the square bracket in SQL statements?
[英]Square bracket us in SQL statements for wildcards
当我使用方括号和%
通配符时,MySQL不会选择任何以数字开头的记录。 互联网上的许多例子都将此视为正确用法。 有什么建议? 它也不适用于字母( ad
)范围。 我正在运行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
子句支持类似正则表达式的字符类(我也找不到相关文档 ),但MySQL确实有一个REGEXP/RLIKE
运算符 ,您可以使用该运算符构造正则表达式以实现类似功能。
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], [af]
。 您无需遵循任何操作,因为%
通配符将等同于^[]
匹配的初始左锚定字母或数字之后的任何零个或多个字符的匹配。
当然,您可以将这些语句与逻辑OR
,或者构建一个匹配任一情况的正则表达式。
SELECT * FROM customers WHERE lname REGEXP '^[a-d]|[0-9]' ORDER BY lname ASC
但要注意的一件事是: MySQL在使用REGEXP
时将无法使用 lname
上的任何索引 。
我相信MS SQL Server支持类似于你提出的语法 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.