derlomi
Goto Top

Einzelne Bausteine aus String auslesen (Oracle 10g)

Mahlzeit Leute,

mal wieder nen Prob bei einer Abfrage.

Und zwar geht es darum, das ich aus einem String der in einer Spalte (Beschreibung) der Tabelle steht, die einzelnen Bausteine als einzelne Spalte extrahieren soll.

In dieser Spalte gibt es Strings wie "HPS-Rohr 75x6" oder aber auch "Rundstahl schwarz Rd.30". Ich müsste die Werte, die jeweils nach dem Komma sind, in einzelne Spalten bekommen.

Habe mich mit "Substr" und "instr" versucht, kriege es aber bisslang nur hin, das ich mir von links die Werte ausgeben kann, welche bis zum 1. Komma folgen. Wie komme ich an die anderen Strings, welche zwischen weiteren Kommatas stehen?

Wäre es möglich das die Werte die zwischen den Kommatas stehen aus dem String in einzelne Spalten extrahiert werden können?

Vielleicht hat einer von euch eine Idee oder eine Lösung dafür. Wäre echt dankbar ^^

Ein Dankeschön schonmal im Vorraus

MfG Tobias

Content-ID: 154793

Url: https://administrator.de/contentid/154793

Ausgedruckt am: 23.11.2024 um 00:11 Uhr

BigWim
BigWim 10.11.2010 um 15:53:01 Uhr
Goto Top
Eine direkte Antwort kann ich mangels Kenntnis nicht liefern, aber aus anderen Scriptsprachen kenne ich noch Funktionen wie Split (oder Join?), die dein String nach Angabe des Trennzeichens in ein Array umwandeln. Vielleicht hilft es ja weiter.

Ansonsten bleibt nur der Weg über ein Schleife, die Dir den String auseinander nimmt. Dafür gibt es massenhaft Beispiele, die Du ja für Deine Zwecke anpassen kannst.

Wenn gar nichts hilft, poste mal den Codeausschnitt.

Markus
bastla
bastla 10.11.2010 um 16:01:56 Uhr
Goto Top
Hallo DerLomi!

Vielleicht hilft Dir Oracle PL/SQL function to split strings into tokens ...

Das Stichwort "split" hat BigWim ja schon genannt; ev findest Du auch noch Ansätze bei einer Suche nach "tokenize" ...

Grüße
bastla
Biber
Biber 10.11.2010 um 19:53:20 Uhr
Goto Top
Moin derLomi,

ergänzend zu BigWim und bastla:

ja, die gute Nachricht ist: solche SPLIT() und JOIN()-Functions gibt es copy&pastebar einige dutzend Male im Netz.
Kannst du stressarm verwenden.

Schlechte Nachrichten sind:
  • es geht nur mit Unterstützung des DBAdmins bzw. sogar nur auf dem Server selbst. Einen Tod musst du sterben - entweder eine PL/SQL-Procedure/ein Package wird eingerichtet oder aber DBweit user-defined-types, die es dir mit nativem SQL ermöglichen. Dann könntest du mit "Table"-Datentypen arbeiten... ist aber auch auf dem Server, an der DB selbst zu tun und einzurichten.

  • Wenn du denn meinetwegen eine Function Split( csvText, delim, x) häätest, die dir aus deinem character separated text das x-te Element rausflöht... und das Ganze in einem dynamischen Statement oder in einem View passiert... dann hast du für jeden gatesverdammten Datensatz -ich schätz mal- 5 zusätzliche Aufrufe einer Funktion Zerlege-Split(), wenn du mit max. 5 "Elementen" in dem csvText-Feld rechnest.
---> da wird dir die DB und auch der DBA einen Vogel zeigen, damit nimmst du allen anderen DB-Benutzern die Luft zum Atmen.

Wenn wenn wenn überhaupt, also wenn sich die Tabelle nicht schon an der Quelle normalisieren lässt, dann mach diese Stringzerlege-Arie einmalig und schreibe die zerbröselten Felder als Einzelfelder in eine neue Tabelle. Aber eben kein Split()/Join()-gehampel bei Ad-Hoc-Abfragen.

Grüße
Biber