数据库
首页 > 数据库> > mysql-在通配符的SQL语句中将方括号括起来

mysql-在通配符的SQL语句中将方括号括起来

作者:互联网

当我将方括号和%通配符一起使用时,如下所示,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

Here’s a demonstration.

但是要记住一件事:使用REGEXP时,您可能使用的名称为MySQL will not be able to use any index.

n.b.我相信MS SQL Server supports a syntax与您提出的类似.

标签:sql,mysql,wildcard
来源: https://codeday.me/bug/20191030/1964780.html