-
QRY negative Zahl mit digits umwandeln und - nicht verlieren
hi *all,
möchte im QRY ein neg. num feld (z.b. -1000) in ein char umwandeln, dabei verliert er aber das "-".
mfg
Ludwig
-
das ist eher ein Fall für SQL oder QQMQRY:
select char(zoned(feldx, 11, 2)) from ...
Gruß,
Robert
-
Kleiner Nachteil der Funktion "char": sie liefert die Zahl linksbündig unformatiert.
-
mit CAST kommt aus das Vorzeichen mit
Hallo,
die char-Funktion hat Nachteile, die beim CAST nicht auftreten.
Beispiel:
Feld number ist ein numerisches Feld mit negativen Werten.
SELECT CAST(number AS CHAR(10))
FROM lib/table
So long,
Uwe
-
sorry, das war nicht die ganze Wahrheit
Da war ich wohl etwas zu voreilig.
Beim CAST stehen die Werte natürlich linksbündig, was nicht unbedingt schön aussieht.
Hier kommt jetzt aber die Lösung, wie das ganze rechtsbündig zu stellen ist.
Annahme:
Feld number ist decimal(12, 2) definiert.
Für die Zeichendarstellung brauchen wir inklusive Vorzeichen 13 Stellen.
Der "Trick" ist, dass man die Länge des Wertes feststellt und dann die danach folgenden Leerzeichen im Ergebnis zuerst ausgibt und dann erst die eigentlich Zahl:
SELECT
SUBSTR(cast(number as character(13)),
length(trim(cast(number as character(13))))+1,
13-length(trim(cast(number as character(13))))
concat
LEFT(cast(number as character(13)),
length(trim(cast(number as character(13))))),
cast(number as character(13))
FROM lib/table
Schönen Abend noch
Uwe
-
Dann würde ich doch den etwas einfacheren Weg gehen:
select concat(digits(mynum),
case when mynum<0 then '-' else '+' end)
from myfile
-
nun doch noch einmal, aber bitte mit Komma
Hallo Fuerchau,
bei Deiner Lösung stehen führende Nullen und vor allem fehlt das Dezimalzeichen (Komma).
Hier ein verbessertes Beispiel von mir.
Das Feld mynum ist als decimal(12, 2) definiert!
Es werden somit 14 Stellen benötigt.
Bei Verwendung von Digits sieht es so aus:
mynum wird_zu
1,23 000000000123+
1324567890,12- 132456789012-
2333312- 000002333312-
So steht alles korrekt rechtsbündig, das Komma ist dabei und auch das Vorzeichen:
SELECT mynum,
SPACE(
14-LENGTH(TRIM(CAST(mynum AS CHAR(14)))))
CONCAT
LEFT(CAST(mynum AS CHAR(14)),
LENGTH(TRIM(CAST(mynum AS CHAR(14)))))
FROM myfile
Das ist zwar etwas kompliziert, aber es bringt ein schönes Ergebnis.
Uwe
-
Wie immer gibts da viele Lösungen.
Am besten wäre denn doch eine kleine (externe) SQL-Funktion, z.B. in RPGLE die das Ganze einfach als %editc intern auflöst.
Mittels Überladungen (verschiedene Eingabeparameter) kann man mehrere Varianten erstellen und man braucht sich um diese ganzen Längen und Concat's nicht zu kümmern.
Similar Threads
-
By Allrounder in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 22-11-06, 12:10
-
By Jump4738 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 22-08-06, 08:08
-
By AndreasH in forum IBM i Hauptforum
Antworten: 13
Letzter Beitrag: 16-05-05, 12:22
-
By Kilianski in forum NEWSboard Server Software
Antworten: 0
Letzter Beitrag: 13-01-05, 13:55
-
By hs in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 14-02-02, 06:30
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks