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