【发布时间】:2019-01-03 01:36:33
【问题描述】:
我有一个字符串为“12as3,45we6,7we89,101112,131415,3234,1234”,并想编写一个 oracle 正则表达式函数或 SQL 以在逗号 (,) 的每 3 次出现后打印所有字符。
所以输出应该是
12as3,45we6,7we89
101112,131415,3234
1234
我尝试了正则表达式,但它只打印第一次出现。
SELECT NVL(
SUBSTR('12as3,45we6,7we89,101112,131415,3234,1234', 1,
INSTR('12as3,45we6,7we89,101112,131415,3234,1234',',',1,3) -1),
'12as3,45we6,7we89,101112,131415,3234,1234')
FROM dual;
输出是 12as3,45we6,7we89
我也试过这个,但它在每个逗号后打印。
with t as (
select '12as3,45we6,7we89,101112,131415,3234,1234' as str from dual
)
select extractvalue(value(x), '/b') x
from t,
table(
xmlsequence(
xmltype('<a><b>' || replace(str, ',', '</b><b>') ||
'</b></a>' ).extract('/*/*')
)
) x
/
有什么办法不使用函数过程,我们可以在Oracle中写一个select语句。
【问题讨论】:
-
不要在您的表中存储这样的 CSV 数据。您在这里需要的是正则表达式拆分,以打破任意行数的单个记录。我不知道该怎么做。