10

假设我在表格的某些字段中有以下字符串:'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?

4

3 回答 3

6

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

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

可能会有不那么笨重的正则表达式解决方案,但这一个绝对有效。 这是一个 SQL Fiddle。

于 2012-10-23T09:41:06.400 回答
3

尝试这样的事情:

SELECT REGEXP_SUBSTR(REGEXP_SUBSTR('product=1627;color=45;size=7', 'color\=([^;]+);?'), '[[:digit:]]+') "colorID"
FROM DUAL;
于 2012-10-23T09:35:38.807 回答
0

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

SELECT REGEXP_SUBSTR('product=1627;color=45;size=7', 'color=(\d+);', 1, 1, 'i', 1) "colorID" 
FROM DUAL;
于 2020-01-14T05:45:48.717 回答