Wenn Sie nur eine Zeichenkette haben und Sie wissen, dass sie immer genau vier Teile hat, können Sie sie so aufteilen, indem Sie nur Standard-Zeichenketten verwenden (und reguläre Ausdrücke vermeiden, die flexibler, aber oft langsamer sind).
HINWEIS: Die zweite Hälfte dieser Antwort bezieht sich auf Strings mit variabler Anzahl von "Teilen".
with inputs (str) as (
select ',,defoifcd,87765' from dual
)
-- end of TEST data; SQL query begins below (use your actual table and column names)
select substr(str, 1, instr(str, ',') - 1) as part_1,
substr(str, instr(str, ',') + 1,
instr(str, ',', 1, 2) - instr(str, ',') - 1) as part_2,
substr(str, instr(str, ',', 1, 2) + 1,
instr(str, ',', 1, 3) - instr(str, ',', 1, 2) - 1) as part_3,
substr(str, instr(str, ',', -1) + 1) as part_4
from inputs;
PART_1 PART_2 PART_3 PART_4
-------- -------- -------- --------
defoifcd 87765
1 row selected.
Wenn die Anzahl der Teile nicht im Voraus bekannt ist, ist es besser, die Ausgabe in einem anderen Format zu erhalten (den Ausgang unten). Wenn man die Teile in Spalten anordnen muss, die nach jeder anderen Verarbeitung gemacht werden können - und das ist immer am besten der Reporting-Anwendung überlassen und nicht in SQL.
with inputs (id, str) as (
select 1, ',,defoifcd,87765' from dual union all
select 2, '' from dual union all
select 3, 'a, b, c' from dual
)
-- end of TEST data; SQL query begins below (use your actual table and column names)
select id, str, level as part_number,
substr(aug_str, instr(aug_str, ',', 1, level) + 1,
instr(aug_str, ',', 1, level + 1) - instr(aug_str, ',', 1, level) - 1) as val
from (select id, str, ',' || str || ',' as aug_str from inputs)
connect by level <= length(str) - length(translate(str, 'z,', 'z')) + 1
and prior id = id
and prior sys_guid() is not null
;
ID STR PART_NUMBER VAL
-- ---------------- ----------- ----------
1 ,,defoifcd,87765 1
1 ,,defoifcd,87765 2
1 ,,defoifcd,87765 3 defoifcd
1 ,,defoifcd,87765 4 87765
2 1
3 a, b, c 1 a
3 a, b, c 2 b
3 a, b, c 3 c
8 rows selected.
Mögliche Duplikat [Split Komma Werte Spalten in Oracle getrennt] (http://stackoverflow.com/questions/31464275/split-comma-separated-values-to-columns-in-oracle) –
To sei ganz konkret: überprüfe nicht die angenommene Antwort, sondern die von Gary: er erklärt und repariert dein aktuelles Problem. –
Sind es immer genau vier Teile? – mathguy