mysql - SQL 语句中的方括号 us 用于通配符

标签 mysql sql wildcard

当我使用带有 % 通配符的方括号时,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

Here's a demonstration.

但是要记住一件事: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/

相关文章:

regex - 使用两个星号在git中添加一个文件

php - 在 PHP 中显示 MySQL

MySql 多个 where 条件 - 只匹配第一个正确的条件

java - MySQL 服务器 5.1.72 的正确 JDBC 版本是什么?

elasticsearch - elasticsearch通配符查询不起作用

java - 泛型:LowerBounded 通配符与 UpperBounded 通配符

mysql - 保证快速响应,预计 1 秒行数

MySQL 在定义表的位置后抛出错误

sql - RODBC sqlSave表创建问题

android - 加入多对一,但显示为一个结果