Mysql SQL中的regex用于检测一个或多个数字

Mysql SQL中的regex用于检测一个或多个数字,mysql,sql,regex,select,sql-like,Mysql,Sql,Regex,Select,Sql Like,我有以下疑问: SELECT * FROM `shop` WHERE `name` LIKE '%[0-9]+ store%' 我想匹配表示'129387 store'的字符串,但上面的正则表达式不起作用。为什么会这样?试试看 SELECT * FROM `shop` WHERE `name` LIKE '%[0-9] store%' 如果您指的是MySQL,LIKE不实现正则表达式。它实现了更严格的SQL模式匹配,它只有两个特殊的操作符:%匹配任何字符序列,而\uu匹配

我有以下疑问:

SELECT * 
FROM  `shop` 
WHERE  `name` LIKE  '%[0-9]+ store%'
我想匹配表示
'129387 store'
的字符串,但上面的正则表达式不起作用。为什么会这样?

试试看

SELECT * 
FROM  `shop` 
WHERE  `name` LIKE  '%[0-9] store%'

如果您指的是MySQL,
LIKE
不实现正则表达式。它实现了更严格的SQL模式匹配,它只有两个特殊的操作符:
%
匹配任何字符序列,而
\uu
匹配任何单个字符

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

SELECT *
FROM shop
WHERE name REGEXP '[0-9]+ store'
MySQL的正则表达式语言不包括指定数字的
\d
,但您可以将其写成:

SELECT *
FROM shop
WHERE name REGEXP '[[:digit:]]+ store'
如果门店名称必须以数字开头,则需要锚定:

SELECT *
FROM shop
WHERE name REGEXP '^[0-9]+ store'
您可以在上了解有关正则表达式语法的更多信息

使用运算符,而不是类似的运算符

试试这个:

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

SELECT * FROM shop WHERE `name` REGEXP '^[0-9]+ store$';
检查

输出

|         NAME |
|--------------|
| 129387 store |

这将允许
129387其他内容存储
@Barmar它将允许在该'store'开始和之后的任何
数字字符串
。不允许
*
匹配任何内容,因此它将允许数值字符串和
存储之间的任何内容。您应该使用
+
,而不是
*
,因为
*
允许零重复。看@kba谢谢,真不敢相信我这么做了!对于那些寻找Oracle SQL的人:使用
WHERE REGEXP_LIKE(名称,'.[0-9]+store.')