Spalte Trim oder?

Homeros

Benutzer
Beiträge
10
Hallo,



ich habe eine Spalte die wo die Werte durch ; und , getränt werden.

Ist:
;844396,765522;20005,87462;20002,62148;20001,60203;65898,65899;20014,60191;20011,50007;

Soll:
844396
765522
20005
87462
20002
62148
20001
60203
65898
65899
20014
60191
20011
50007
Ich möchte jetzt gern die Werte einzehl auslesen und weiter verarbeiten.

Trim geht leider nicht da die Werte nicht gleich lang sind.

Es gibt doch die möglichkeit zu sagen Trenne nach den ersten , und trenne nach den zweiten; usw.

Über ein Tipp wäre ich sehr dankbar.
 
Werbung:
Hat Oracle was vergleichbares zu regexp_split_to_table wie PostgreSQL?

Code:
test=*# select regexp_split_to_table(';844396,765522;20005,87462;20002,62148;20001,60203;65898,65899;20014,60191;20011,50007;','[;,]');
 regexp_split_to_table
-----------------------

 844396
 765522
 20005
 87462
 20002
 62148
 20001
 60203
 65898
 65899
 20014
 60191
 20011
 50007

(16 rows)

test=*#
 
Kenne nur diese Methode...
Code:
With dat As
(
Select 'Hallo,wie;gehts,?' as val From dual
)
Select regexp_substr(val, '[^,;]+', 1, level)
From   dat
Connect By level <= length(regexp_replace(val, '[^,;]+')) +1

Edit: Laut google gibt es auch noch ne "xmltable"-Variante... Hab ich aber noch nie verwendet...
 
@Distrilec vielen Dank
Darf ich meine Aufgabe noch mal umstellen *peinlich*
wenn ich nicht
REGEXP_SUBSTR(VAL,'[^,;]+',1,L
844396
765522
20005
87462
20002
62148
20001
60203
65898
65899
20014
60191
20011
50007

sonder die Ausgabe doch lieber als tabelle haben möchte :confused:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
844396 | 765522 | 20005| 87462 | 20002 | 62148 | 20001 | 60203 | 65898 | 65899 | 20014 | 60191 | 20011 | 50007 |
 
@akretschmer
Du hast recht erst denken dann schreiben Sorry
Leider bekomme ich aus der Datenbank den String so "vorgesetzt" und muss ihn jetzt weiter bearbeiten.
Ich brauch den aus den String bestimmte Werte mit dem ich weitere abfragen erzeugen darf.
 
@Distrilec
Leider habe ich in der Dantenbak eine Klasse mit ein Attribut welches den Inhalt ";844396,765522;20005,87462;20002,62148;20001,60203;65898,65899;20014,60191;20011,50007;" hat.
Durch den select (abfrage einschrängung auf das Attribut) habe ich den Wert.
Leider komme ich mit Trim nicht weiter. Da der Wert im Attribut von unterschiedlicher länge ist. Der einzige anhaltspunkt ist das, und ;
Und ja wie oben beschrieben habe ich zuschnell geschrieben sorry
Bin auch grad dabei ob ich das nicht mit
SELECT INITCAP(REGEXP_SUBSTR
lösen könnte :confused::D
 
Ich möchte nicht sagen dass es unmöglich ist... Es ist definitiv möglich (Mit viel PL/SQL, SQL und dynamic SQL gewurschtel)...
Aber es wäre wirklich sinnvoller das ganze gescheit abzulegen.
 
Für alle die mal so ein Problem haben sollte und gern auf PL/SQL verzichten möchten.

SELECT
INITCAP(REGEXP_SUBSTR(';844396,765522;20005,87462;20002,62148;20001,60203;65898,65899;20014,60191;20011,50007;' , '[^, ;]+',1,1)) AS Klasse_1,
INITCAP(REGEXP_SUBSTR(';844396,765522;20005,87462;20002,62148;20001,60203;65898,65899;20014,60191;20011,50007;' , '[^, ;]+',1,2)) AS Klasse_2,
INITCAP(REGEXP_SUBSTR(';844396,765522;20005,87462;20002,62148;20001,60203;65898,65899;20014,60191;20011,50007;' , '[^, ;]+',1,3)) AS Klasse_3
FROM
dual

Wobei 1,2,3 die Position der Spalten angibt.
 
Hier offenbart sich das ganze Drama des vergurkten Designs. Dir ist die Länge des Wertes nicht bekannt (siehe Deine Antwort #9), wie willst Du also wissen, ob Du 3, 13 oder 365 Spalten bekommst? Oder 47?

Um das dynamisch zu lösen wirst Du das SQL dynamisch erstellen und via EXECUTE (PostgreSQL-Speak) ausführen müssen. Die bessere Lösung wäre: das vergurkte Design zu bereinigen. Glaub mir.
 
@ukulele richtig.
Es kann sein das ich mich nicht verständlich ausgedrückt habe.
Leider kommt es doch mal vor, dass man eine DB Vorfindete die nicht den vorgestellten Design entpricht. Jeder Designer verfolgt doch unterschiedliche Ansätze die zum gleichen Ziel führen sollten ;)
 
Werbung:
Zurück
Oben