繁体   English   中英

方括号括起来我们在通配符的SQL语句中

[英]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支持类似于你提出的语法

我认为在Mysql中你可以做这样的事情

SELECT * FROM customers WHERE lname REGEXP '^[a-d]'

MySql小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM