SQL中的正则表达式来检测一个或多个数字

adi*_*dit 6 regex mysql sql select sql-like

我有以下查询:

SELECT * 
FROM  `shop` 
WHERE  `name` LIKE  '%[0-9]+ store%'
Run Code Online (Sandbox Code Playgroud)

我想匹配说 的字符串'129387 store',但上面的正则表达式不起作用。这是为什么?

Bar*_*mar 5

如果你指的是MySQL,LIKE它不实现正则表达式。它实现了更受限制的 SQL 模式匹配,它只有两个特殊运算符:%匹配任何字符序列,并_匹配任何单个字符。

如果要正则表达式匹配,则必须使用REGEXPorRLIKE运算符:

SELECT *
FROM shop
WHERE name REGEXP '[0-9]+ store'
Run Code Online (Sandbox Code Playgroud)

MySQL 的正则表达式语言不包含\d指定数字,但您可以将其写为:

SELECT *
FROM shop
WHERE name REGEXP '[[:digit:]]+ store'
Run Code Online (Sandbox Code Playgroud)

如果商店名称必须以数字开头,则需要一个锚点:

SELECT *
FROM shop
WHERE name REGEXP '^[0-9]+ store'
Run Code Online (Sandbox Code Playgroud)

您可以在regular-expressions.info中了解有关正则表达式语法的更多信息。


Sah*_*hah 5

使用REGEXP运算符而不是LIKE运算符

尝试这个:

SELECT '129387 store' REGEXP '^[0-9]* store$';

SELECT * FROM shop WHERE `name` REGEXP '^[0-9]+ store$';
Run Code Online (Sandbox Code Playgroud)

检查SQL FIDDLE 演示

输出

|         NAME |
|--------------|
| 129387 store |
Run Code Online (Sandbox Code Playgroud)