Nur zum Spaß - hier ist eine Möglichkeit, den Hersteller und das Modell in separaten Spalten, ohne die \n
, die Kommas und die Anführungszeichen zu bekommen. Sie können die Lösung so anpassen, dass Sie den Hersteller und das Modell in doppelten Anführungszeichen und durch Komma getrennt in einer einzigen Spalte erhalten, wenn dies tatsächlich erforderlich ist. (Wenn das als Zwischenschritt gedacht war, brauchen Sie es nicht.) Beachten Sie, dass ich lieber mit dem doppelten Anführungszeichen als "Marker" arbeite, um nicht mit \n
umgehen zu müssen - und Sie können es auch tun , wenn Sie die folgende Lösung ändern müssen.
Ich nahm an, dass die Zeichenfolgen genau in dem Format sind, das Sie anzeigen. Ich habe eine kleine Testtabelle mit zwei Zeilen erstellt, um zu zeigen, wie die Lösung in diesem Fall funktioniert. Wenn es eine einzelne Zeile gibt, werden Sie möglicherweise nicht auf einige der Komplikationen stoßen, wenn mehrere Zeilen vorhanden sind, und ich wollte eine allgemeinere Lösung.
Ich schrieb die Lösung nur mit Standard-String-Funktionen (keine regulären Ausdrücke), was zu einer schnelleren Ausführung führen sollte.
with
test_data (id, str) as (
select 1, '"Honda","Civic"\n"Toyota","Camry"\n"Ford","Fusion"' from dual union all
select 2, '"Chevrolet","Volt"\n"Tesla","Model S"' from dual
)
-- end of test data; solution (SQL query) begins below this line
select id,
substr(str, 1 + instr(str, '"', 1, 1 + 4 * (level - 1)),
instr(str, '"', 1, 2 + 4 * (level - 1)) -
instr(str, '"', 1, 1 + 4 * (level - 1)) - 1) as manufacturer,
substr(str, 1 + instr(str, '"', 1, 3 + 4 * (level - 1)),
instr(str, '"', 1, 4 + 4 * (level - 1)) -
instr(str, '"', 1, 3 + 4 * (level - 1)) - 1) as model_name
from test_data
connect by level <= 1 + length(str) - length(replace(str, '\', ''))
and prior id = id
and prior sys_guid() is not null
;
ID MANUFACTURER MODEL_NAME
--- ------------ ------------
1 Honda Civic
1 Toyota Camry
1 Ford Fusion
2 Chevrolet Volt
2 Tesla Model S
5 rows selected.
Willkommen bei SO. Hier findest du etwas zu [fragen] und wie man ein [mcve] erstellt, das nützlich sein kann, um deine Frage zu verbessern. Zeigen Sie vor allem, was Sie bisher versucht haben; Fragen wie "wie man das macht", ohne sich Mühe zu geben, sind normalerweise nicht erwünscht. – Aleksej
[Diese Frage] (http://stackoverflow.com/questions/3819375/convert-comma-separated-string-to-array-in -pl-sql) hat viele gute Antworten, die meiner Meinung nach hier anwendbar sind. Ersetzen Sie einfach \ n für, – Matt
Ist die Eingabe genau so, wobei die Zeichen '\ n' als Trennzeichen verwendet werden? Dann - müssen Sie sie nur aufbrechen, wie Sie gezeigt haben, müssen Sie nicht Hersteller und Modell in getrennten Spalten trennen? (Vielleicht sollten Sie!) – mathguy