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.')