【发布时间】:2016-09-19 05:13:37
【问题描述】:
我有一张这样的桌子。
|PARAMKEY | PARAMVALUE ----------+------------ KEY |[["PAR_A",2,"SCH_A"],["PAR_B",4,"SCH_B"],["PAR_C",3,"SCH_C"]]
我需要将值分成三列并使用 REGEXP_SUBSTR。这是我的代码。
SELECT REGEXP_SUBSTR(paramvalue, '[^],["]+', 1,1 ) PARAMETER
,REGEXP_SUBSTR(paramvalue, '[^],[",]+', 1, 2) VERSION
,REGEXP_SUBSTR(paramvalue, '[^],["]+', 1, 3) SCHEMA
FROM tmp_param_table
where paramkey = 'KEY'
UNION ALL
SELECT REGEXP_SUBSTR(paramvalue, '[^],["]+', 1, 4 ) PARAMETER
,REGEXP_SUBSTR(paramvalue, '[^],[",]+', 1, 5) VERSION
,REGEXP_SUBSTR(paramvalue, '[^],["]+', 1, 6) SCHEMA
FROM tmp_param_table
where paramkey = 'KEY'
UNION ALL
SELECT REGEXP_SUBSTR(paramvalue, '[^],["]+', 1, 7 ) PARAMETER
,REGEXP_SUBSTR(paramvalue, '[^],[",]+', 1, 8) VERSION
,REGEXP_SUBSTR(paramvalue, '[^],["]+', 1, 9) SCHEMA
FROM tmp_param_table
where paramkey = 'KEY';
这就是我需要的结果。
PARAMETER | VERSION | SCHEMA ---------+---------+------- PAR_A |2 |SCH_A PAR_B |4 |SCH_B PAR_C |3 |SCH_C
但是这个值太长了,我希望有另一种方法可以通过使用循环或任何东西来使其更简单。 谢谢
【问题讨论】:
-
PARAMVALUE 列有多长?
-
@DmitryGrekov data_type 是 clob,我必须将值选择为 52 行。
-
性能对您的问题很重要吗?如果是,您可能会受益于标准
dbms_lob包中的字符串函数。与正则表达式解决方案相比,执行时间可能会下降一个数量级或更多。 docs.oracle.com/cd/B19306_01/appdev.102/b14258/…
标签: regex oracle loops plsql split