我将以下数据存储在数据库列xyz
中:
a=222223333;b=433333657675457;c=77777;
a=52424252424242;d=5353535353;b=7373737373;
不要求b
值始终存在,但如果存在b
值,则必须检索b=
之后的值。
我想在Oracle中使用正则表达式检索b
的值,但我无法执行此操作。
任何人都可以帮我找到解决方案吗?
答案 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)