oracle 11g中的正则表达式如何从列中检索数据

时间:2018-01-27 05:48:25

标签: sql regex oracle

我将以下数据存储在数据库列xyz中:

a=222223333;b=433333657675457;c=77777;
a=52424252424242;d=5353535353;b=7373737373;

不要求b值始终存在,但如果存在b值,则必须检索b=之后的值。

我想在Oracle中使用正则表达式检索b的值,但我无法执行此操作。

任何人都可以帮我找到解决方案吗?

4 个答案:

答案 0 :(得分:1)

您可以使用regexp_substr

select substr(regexp_substr(';' || xyz, ';b=\d+'), 4) from your_table;

;的连接是为了区分键值对与关键词' ab'和' b'。

答案 1 :(得分:1)

我建议使用Oracle内置函数REGEXP_SUBSTR,它使用正则表达式返回子字符串。根据您发布的示例,以下内容应该有效。

SELECT REGEXP_SUBSTR(xyz, 'b=\d+;') FROM your_table

答案 2 :(得分:1)

使用Subexpression选择REGEXP_SUBSTR匹配模式的子字符串

我的匹配模式'b=(\d+);'包含用于标记此子表达式的括号,该子表达式是REGEXP_SUBSTR的最后一个参数。

如果查看12c documentation,您会看到第三个示例使用子表达式。

转义的d just是一个正则表达式简写,表示我们正在查找数字,加号是一个指示1位或更多位数的量词。

SCOTT@db>WITH smple AS (
  2      SELECT
  3          'a=52424252424242;d=5353535353;b=7373737373;' dta
  4      FROM
  5          dual
  6  ) SELECT
  7      dta,
  8      regexp_substr(a.dta,'b=(\d+);',1,1,NULL,1) subexp
  9    FROM
 10      smple a;
DTA                                           subexp
---------------------------------------------------------
a=52424252424242;d=5353535353;b=7373737373;   7373737373

答案 3 :(得分:-2)

enter image description here以上解决方案适用于所有情况,即使b包含字母数字