我对此问题有数据和类似问题:Parsing pipe delimited string into columns?
但是我的数据可以包含没有数据的子字符串或不完整的字符串。请注意,5个值是最大值。除非字符串有5个值,否则上述问题中的解决方案将失败。见下文:
KEY VALUE
---- -------------------
00 val1||||val5
01 val2|val2|val3|
02 val1|val2||val4
答案 0 :(得分:1)
如果使用PL / SQL并且循环正常,则可以使用apex_util.string_to_table:
declare
l_tab apex_application_global.vc_arr2;
begin
for r in (select key, value from mytable) loop
l_tab := apex_util.string_to_table (r.value, '|');
dbms_output.put_line ('key='||r.key);
for i in 1..l_tab.count loop
dbms_output.put_line ('value ' || i || '='||l_tab(i));
end loop;
end loop;
end;
答案 1 :(得分:1)
<强>设置强>:
CREATE TABLE TABLE_NAME ( KEY, VALUE ) AS
SELECT '00', 'val1||||val5' FROM DUAL UNION ALL
SELECT '01', 'val2|val2|val3|' FROM DUAL UNION ALL
SELECT '02', 'val1|val2||val4' FROM DUAL;
查询1 :
SELECT Key,
REGEXP_SUBSTR( value, '([^|]*)(\||$)', 1, 1, NULL, 1 ) AS val1,
REGEXP_SUBSTR( value, '([^|]*)(\||$)', 1, 2, NULL, 1 ) AS val2,
REGEXP_SUBSTR( value, '([^|]*)(\||$)', 1, 3, NULL, 1 ) AS val3,
REGEXP_SUBSTR( value, '([^|]*)(\||$)', 1, 4, NULL, 1 ) AS val4,
REGEXP_SUBSTR( value, '([^|]*)(\||$)', 1, 5, NULL, 1 ) AS val5
FROM table_name
<强>结果:
KEY VAL1 VAL2 VAL3 VAL4 VAL5
--- --------------- --------------- --------------- --------------- ---------------
00 val1 val5
01 val2 val2 val3
02 val1 val2 val4