Anmelden

View Full Version : numerisches Feld erstellen



heynem
04-12-02, 10:39
Hallo alle zusammen,
nachdem es bei der ersten Frage ja so perfekt geklappt hat(nochmals Danke) werde ich dies Forum ein wenig "ausnutzen" Keine Sorge, wenn ich helfen kann, werde ich dies auch machen. Nun die (einfache) Frage: wie kann ich aus einem normalen alphanumerischen Feld ein numerisches mit 0 Nachkommastellen machen ?? Evtl ein Ergebnisfeld in Query ??

Besten Dank im voraus
Michael

Steven
04-12-02, 10:50
Meinst du im Displayfile, oder im PF?


[Dieser Beitrag wurde von Steven am 04. Dezember 2002 editiert.]

heynem
04-12-02, 10:51
Oups, ganz vergessen. Ich meine natürlich eine PF Datei.
Sorry

Steven
04-12-02, 10:53
Schreib bei der Längenangabe einfach die Länge, dann 2 Leerschritte und dann 0. Dann hast du nummerisch mit 0 nachkommastellen. Die 0 gibt die Kommastellen an.

Fuerchau
05-12-02, 09:27
Ich nehme an, dass das Feld in der Datei so bleiben soll wie es ist und nur bei der Auswertung eine Umwandlung in numerisch erfolgen soll.

Dies geht leider nicht mit Query sondern nur mit SQL (probier mal den Query-Manager STRQM).

SQL erlaubt das sog. "casten" von Variablen.
Dazu gibt man nur den gewünschten Typ und in Klammern den Quelltyp, bei numerischen Feldern ggf. noch Länge und Nachkomma an.

Z.B.:

char(>NumField< ) as MyChar -- Umwandlung numerisch nach Alpha, der numerische Wert wird allerdings linksbündig ausgerichtet

dec(>CharField<, 11, 0) as MyDec -- Umwandlung Zeichen in Numerisch mit 11 Stellen und 0 Nachkomma, aber Achtung: das Zeichenfeld darf nur Ziffern enthalten, ggf. führende Leerzeichen, 1 führendes Vorzeichen (+/-) und ein Dezimalzeichen (Punkt, Komma) dass durch die aktuellen SQL-Einstellungen festgelegt ist. Tausendertrennung ist schon nicht mehr erlaubt. Ansonsten werden ungültige Daten geliefert, bzw. der SQL bricht bei diesem Satz ab.

Wenn das Zeichenfeld aber immer einen fest formatierten Dezimalwert enthält, hilft die Funktion "substr" und "concat":

dec(substr(charfld, 2, 5) concat substr(charfld, 9, 2), 11, 0) as MyDec

Es führen viele Wege zur Typumwandlung !

Leider ist ein Prüfen auf korrekten Feldinhalt etwas schwierig:

case
when length(trim(charfld))=0 then dec(0, 11, 0)
when translate(upper(charfld), "ZYXW...CBA", "ABC...WXYZ) <> charfld then dec(0, 11, 0)
else dec(charfld, 11, 0)
end as MyDec

Erklärung:
trim() entfernt Leerzeichen am Anfang und Ende
Length() gibt die Länge des Feldes zurück
=> 1. Fall (case) also: Feld ist leer

upper() wandelt Kleinbuchstabein in Großbuchstaben
Translate() ersetzt jedes Zeichen des 3. Arguments duch das entsprechende Zeichen des 2. Argumentes der entsprechenden relativcen Position des 3. Argumentes.
Wenn kein Zeichen zum Ersetzen vorhanden, bleibt das Zeichen unverändert.
Das Argument 2 und 3 ersetzt also jedes Alphazeichen durch ein beliebiges anderes Alphazeichen. Sind also Alphazeichen vorhanden ändert sich der Feldinhalt.
=> 2. Fall (case) also: Feld ist wahrscheinlich nicht numerisch

=> 3. Fall (else) Typumwandlung scheint möglich

Viel Spaß beim Probieren !