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

时间:2013-12-29 00:24:34

标签: mysql sql wildcard

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

2 个答案:

答案 0 :(得分:3)

虽然我不相信MySQL在[]中使用常规LIKE子句支持类似正则表达式的字符类(我也找不到relevant documentation),但MySQL确实有{{} 3}}您可以使用它来构建可比功能的正则表达式。

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

REGEXP/RLIKE operator

但要注意的一件事是:[{1}}使用lname时可能会REGEXP。{/ p>

n.b。我相信Here's a demonstration.与您的建议相似。

答案 1 :(得分:1)

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

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

MySql Fiddle