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

时间:2013-12-27 04:41:17

标签: mysql sql regex select sql-like

我有以下查询:

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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'

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

答案 1 :(得分:3)

使用REGEXP运算符代替 LIKE 运算符

试试这个:

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

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

检查SQL FIDDLE DEMO

<强>输出

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

答案 2 :(得分:0)

尝试

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