如何获取与Oracle SQL中的正则表达式匹配的字符串的一部分

时间:2012-10-23 09:26:32

标签: sql regex oracle

假设我在表格的某个字段中有以下字符串:'product = 1627; color = 45; size = 7'。 我想查询颜色并获得45。

使用此查询:

SELECT REGEXP_SUBSTR('product=1627;color=45;size=7', 'color\=([^;]+);?') "colorID" 
FROM DUAL;

我明白了:

colorID  
---------
color=45;
1 row selected

是否可以获得匹配字符串的一部分 - 本例中为45?

3 个答案:

答案 0 :(得分:5)

一种方法是使用REGEXP_REPLACE。您需要将整个字符串定义为正则表达式模式,然后只使用您想要的元素replace string。在此示例中,ColorID是整个字符串中的第三个模式

SELECT REGEXP_REPLACE('product=1627;color=45;size=7'
                         , '(.*)(color\=)([^;]+);?(.*)'
                         , '\3') "colorID"  
FROM DUAL;  

可能会有较少的笨重的正则表达式解决方案,但这个肯定有效。 Here's a SQL Fiddle.

答案 1 :(得分:3)

尝试这样的事情:

SELECT REGEXP_SUBSTR(REGEXP_SUBSTR('product=1627;color=45;size=7', 'color\=([^;]+);?'), '[[:digit:]]+') "colorID"
FROM DUAL;

答案 2 :(得分:0)

从Oracle 11g开始,我们可以在REGEXP_SUBSTR中指定捕获组。

SELECT REGEXP_SUBSTR('product=1627;color=45;size=7', 'color=(\d+);', 1, 1, 'i', 1) "colorID" 
FROM DUAL;