PDA

View Full Version : konvertierungsproble???



otto-mueller
06-10-05, 15:55
Hallo allerseits,

ich habe ein Problem:

ich möchte auf der AS400 per SQL eine Spalte prüfen, ob sie Zahl enthält, wenn ja dann diese Spalte in eine andere Spalte als Zahl zurückgeben.

Wie kann ich das machen??

Hier mein Code:


UPDATE TBL1 SET SP2 = IIF(ISNUMBER(SP1), SP1, 0)

Ich hoffe ihr könnt mir helfen! :o :o :o :confused: :confused: :confused:

Danke vorab

Gruß
Otto

B.Hauser
06-10-05, 19:46
Hallo Otto,

eine ganz einfache Lösung gibt es nicht, aber folgender Trick sollte funktionnieren:



Update MyTable
set MyInt = Cast(MyChar as Integer)
where Length(Trim(Translate(MyChar, ' ', '1234567890'))) = 0


Ich bin in diesem Beispiel davon ausgegangen, dass es sich bei dem numerischen Ergebnis-Feld um ein Integer-Feld handelt.

Birgitta

otto-mueller
06-10-05, 22:32
Hallo Birgitta,

vielen Dank erstmal für die Antwort.

Weisst du, wo ich Dokumentation über die Funktion "Translate()" und ähnliches im Internet finde?

Ich werde morgen deine Lösung testen und werde mich dann nochmal melden.

Viele Grüße

Otto

B.Hauser
07-10-05, 07:48
Weisst du, wo ich Dokumentation über die Funktion "Translate()" und ähnliches im Internet finde?
Otto

Alle Scalaren Funktionen sind in der SQL-Reference beschrieben, die in der Online-Library zu finden ist:
SQL Reference (http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/db2/rbafzmst02.htm)

Birgitta

otto-mueller
10-10-05, 20:58
Hallo Birgitta,

danke nochmal für den Tip.

Das hat ganz gut funktioniert!

Ich habe wo anders versucht, aus einem Text "," zu entfernen. Dazu habe ich zuerst REPLACE() genommen - die Funktion war unbekannt. Dann habe ich mit TRANSLATE() folgendes versucht:

Translate(MyChar, '', ',')
Also Komma durch Nichts ersetzen. Das klappt auch nicht. Es kommt eine Fehlermeldung, die sagt, daß die Länge des Parameters '' zu kurz sei?!?!?! :confused:

Wie kann man es denn sonnst lösen?

Danke nochmal

Gruß
Otto

Fuerchau
10-10-05, 22:42
Da wirds schon komplizierter, bzw. in SQL unmöglich.
Translate ersetzte (also übersetzt) jedes Zeichen der 1. Liste mit dem paarigen Zeichen der 2. Liste. Die 2. Liste kann kürzer sein, für fehlende Stellen werden eben Leerzeichen angenommen.

Steht der Replace nicht zur Verfügung, uss man aus SUBSTR und POSSTR und CONCAT etwas zusammenbauen, was aber nur mit genau 1 Zeichenkette funktioniert.
Mehrere Vorkommen können nicht ersetzt werden. Hierzu ist entweder das neue Release einzusetzen, Replace-Funktion, oder per "Create Function" eine eigene Funktion zu erstellen.

Zu SUBSTR, POSSTR und CONCAT gibt es im Forum Beispiele.