trommelbommel
Goto Top

SQL Befehl zum Teilen eines String

Hallo,
ich habe in einer Datenbank eine Spalte in der z.B: solch Werte stehen ":abc:abc:abc".
Wie kann ich diese per SQL Befehl ausseinander Teilen zu 3 Werten "abc"
Special greets aus der Lausitz.
Mfg TrommelBommel

Content-ID: 31118

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

Ausgedruckt am: 26.11.2024 um 01:11 Uhr

Dani
Dani 25.04.2006 um 14:10:41 Uhr
Goto Top
Hi,
also ich wüsste nicht, dass man das in SQL machen könnte! Aber in PHP geht es mit:

Split:
list($w1,$w2,$e3)=split("\:",Variable);  

Explode:
$werte=explode(":",Variable); //Hier stehen alle Werte in einem Feld / Array drinne.  


Gruß
Dani
pi314
pi314 25.04.2006 um 15:20:19 Uhr
Goto Top
Wie kann ich diese per SQL Befehl
ausseinander Teilen zu 3 Werten

Wie du schon bemerkst, bräuchtest ja einen Befehl.
Da aber SQL nur eine Abfragesprache ist (eigentlich keine richtige Programmiersprache damit), kannst du solche Dinge nur über Sprachen verwirklichen, da du ja auch Kontrollstrukturen usw. brauchst.
Man kann nicht per SQL-Abfrage aus einer Spalte drei (oder nicht definierte) machen.
Könnte höchstens sein, dass es herstellerabhängiges SQL gibt, das so was zur Verfügung stellt, aber native-SQL sieht das nicht vor.

Somit entweder per PHP (siehe Dani-Kommentar) oder per PL/SQL... Prozeduren sind ja jetzt auch in MySQL möglich.
TrommelBommel
TrommelBommel 25.04.2006 um 15:26:42 Uhr
Goto Top
Vielen Dank für die Antworten.
Wieder eine Erfahrung reicher face-smile
Biber
Biber 25.04.2006 um 20:35:28 Uhr
Goto Top
Hmm, so ist es aber missverständlich formuliert - sowohl Frage wie Antworten.

a) Von was für einer Datenbank reden wir denn? Paradox? DB2? Oracle? Teradata?
In ziemlich allen ernstzunehmenden SQL-Datenbanken kannst Du User Defined Functions definieren, die Dir auch so eine Token/ArrayList-Mimik ermöglichen.
Diese UDFs sind SQL-nah aufgebaut (also Erweiterungen des Standard-SQL-Umfangs), aber eben keine Zugriffe auf andere Programmiersprachen.

b) Aber, den Umweg über andere Prog-Sprachen/Dialekte gibt es ja auch - billigstes Beispiel wäre MS-ACCESS mit seinem VBA-Schnickschnack.

c) und last not least: eigentlich ist es in Datenbanktabellen ohnehin so gedacht, dass auf VIEWs oder Abfragen/Sichten zugegriffen wird und nicht auf die physikalisch vorhandenen Datenfelder. Bau Dir einen View, der Dir Dein eines vorhandenes Feld als drei einzelne Felder anzeigt. Fertig.
Allerdings wirst Du das Feld NICHT durch Änderung der drei Teilfelder updaten können ohne Programmlogik.

Gruß
Biber
Guenni
Guenni 25.04.2006 um 23:11:09 Uhr
Goto Top
Nur so nebenbei:

Ein Blick in die Hilfe oder in ein Buch ist manchmal hilfreich face-smile

Zumindest MS-ACCESS und MySQL(mehr habe ich nicht zum Testen) bieten
entsprechende Funktionen.

Eine Spalte ist mit folg. Wert belegt:


Spalte
abc:def:ghi

Dann bringt folgende Anweisung

SELECT left(spalte,3) as Wert1, left( right(spalte,7),3) as Wert2,right(spalte,3) as Wert3 FROM Tabelle;

dieses Ergebnis:

Wert1 Wert2 Wert3
abc def ghi

Die Syntax ist bei MS-ACCESS und MySQL identisch.

Na gut, ist für oben genannte Anwendung natürlich nur sinnvoll, wenn der Spalteninhalt klar definiert ist bzw.
einer Regel unterliegt.

Aber ich denke mal, dass auch andere SQL-Versionen Funktionen zur Stringmanipulation bereitstellen,
denn es muß ja(m.M. nach) möglich sein, entsprechende VIEWs zu erzeugen, ohne auf komplexe
Programmierlogik(VBA, C++ etc) und Webinterfaces(PHP) zurückgreifen zu müssen.

Gruß
Günni