SQL Abfrage: Textfeld aufsplitten nach Trennzeichen
Hallo zusammen,
ich habe eine Db2 Datenbank, dort gibt es eine Tabelle mit einer Spalte in die Maße als Text eingetragen werden Höhe*Breite*Länge und hin und wieder als vierter Wert die Anzahl,
das Ganze sieht dann in etwa so aus 100x120x80 oder 120X180X60X2 (weil es zwei Stücke sind).
Ich möchte nun per SQL-Abfrage das Textfeld in 3 bzw. 4 Spalten trennen, immer nachdem x wobei das x auch X (groß geschrieben sein kann), um danach die einzelnen Werten weiter zu verarbeiten.
Hat jemand eine Idee wie ich dass realisieren kann?
ich habe eine Db2 Datenbank, dort gibt es eine Tabelle mit einer Spalte in die Maße als Text eingetragen werden Höhe*Breite*Länge und hin und wieder als vierter Wert die Anzahl,
das Ganze sieht dann in etwa so aus 100x120x80 oder 120X180X60X2 (weil es zwei Stücke sind).
Ich möchte nun per SQL-Abfrage das Textfeld in 3 bzw. 4 Spalten trennen, immer nachdem x wobei das x auch X (groß geschrieben sein kann), um danach die einzelnen Werten weiter zu verarbeiten.
Hat jemand eine Idee wie ich dass realisieren kann?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 382738
Url: https://administrator.de/forum/sql-abfrage-textfeld-aufsplitten-nach-trennzeichen-382738.html
Ausgedruckt am: 23.04.2025 um 13:04 Uhr
9 Kommentare
Neuester Kommentar
Moin,
Die DB2 sollte ein Locate kenne/ können
https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/sqlref/src/ ...
In Kombination mit SubStr solltest du dann zum Ergebnis kommen:
https://stackoverflow.com/questions/18961996/how-to-split-a-string-value ...
Habe es aber nicht getestet, da ich noch nicht @work bin und an unsere Power8 dran komme...
Gruß
em-pie
Die DB2 sollte ein Locate kenne/ können
https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/sqlref/src/ ...
In Kombination mit SubStr solltest du dann zum Ergebnis kommen:
https://stackoverflow.com/questions/18961996/how-to-split-a-string-value ...
Habe es aber nicht getestet, da ich noch nicht @work bin und an unsere Power8 dran komme...
Gruß
em-pie
Verschachtelte Tabellen kenne ich so nicht, nur Abfragen.
Wenn Du das öfters brauchst, würde ich die Tabelle mit einem aufteilenden Select into temptabelle kopieren.
Dann hast Du das was Du willst und die Abfragen werden leichter und übersichtlicher, vermutlich auch schneller.
... ist zwar schon ein bisschen älter, war aber genau das, was ich eben brauchte. Danke icet83
Das Feld muss ausreichend Trennzeichen enthalten, also noch ein paar x hinten dran.
Groß- durch Kleinbuchstaben ersetzen mit Replace(rhw329, 'X', 'x')
VG buka2000
Das Feld muss ausreichend Trennzeichen enthalten, also noch ein paar x hinten dran.
Groß- durch Kleinbuchstaben ersetzen mit Replace(rhw329, 'X', 'x')
Select rhw329_original, rhw329
, SUBSTR(rhw329, 1, LOCATE_IN_STRING(rhw329, 'x', 1, 1) -1) AS Erster
, SUBSTR(rhw329, LOCATE_IN_STRING(rhw329, 'x', 1, 1) +1, LOCATE_IN_STRING(rhw329, 'x', 1, 2) - LOCATE_IN_STRING(rhw329, 'x', 1, 1) -1) AS Zweiter
, SUBSTR(rhw329, LOCATE_IN_STRING(rhw329, 'x', 1, 2) +1, LOCATE_IN_STRING(rhw329, 'x', 1, 3) - LOCATE_IN_STRING(rhw329, 'x', 1, 2) -1) AS Dritter
, SUBSTR(rhw329, LOCATE_IN_STRING(rhw329, 'x', 1, 3) +1, LOCATE_IN_STRING(rhw329, 'x', 1, 4) - LOCATE_IN_STRING(rhw329, 'x', 1, 3) -1) AS Vierter
, SUBSTR(rhw329, LOCATE_IN_STRING(rhw329, 'x', 1, 4) +1, LENGTH(rhw329) - LOCATE_IN_STRING(rhw329, 'x', 1, 4) ) AS Rest
From
( Select rhw329 as rhw329_original
, Replace(rhw329, 'X', 'x') || 'xxxx' as rhw329
From
( Select '100x120x80' as rhw329 from sysibm.sysdummy1 union
Select '120X180X60X2' as rhw329 from sysibm.sysdummy1
)
)
VG buka2000