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

Posted

技术标签:

【中文标题】SQL中的正则表达式来检测一个或多个数字【英文标题】:regex in SQL to detect one or more digit 【发布时间】:2014-01-14 16:49:54 【问题描述】:

我有以下疑问:

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

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

【问题讨论】:

对于那些寻找 Oracle SQL 的人:使用WHERE REGEXP_LIKE(name, '.[0-9]+ store.') 【参考方案1】:

如果你指的是 mysqlLIKE 没有实现正则表达式。它实现了更受限制的 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 了解更多关于正则表达式语法的信息。

【讨论】:

@kba 谢谢,不敢相信我做到了!【参考方案2】:

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

试试这个:

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

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

查看SQL FIDDLE DEMO

输出

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

【讨论】:

这将允许129387 something else store @Barmar 它将允许任何 numeric string 在开头和之后的`store`。 不,它没有。 .* 匹配任何内容,因此它将允许数字字符串和 store 之间的任何内容。 您应该使用+,而不是*,因为* 允许零重复。见sqlfiddle.com/#!2/306adb/1【参考方案3】:

试试

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

【讨论】:

以上是关于SQL中的正则表达式来检测一个或多个数字的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:检测密码由6-20字母和数字组成

正则表达式匹配一个或多个字母或数字包围的所有单个下划线

Django中常用的正则表达式

一个正则表达式中的多个表达式

C++ 正则检测字串,提取数字以及字符

Python 正则表达式