Discussion:
zahlenformate
(zu alt für eine Antwort)
Werner Knapp
2006-05-28 16:03:37 UTC
Permalink
Hallo @ll,

für die Datenausgabe im QueryBrowser möchte ich einen Zahlenwert mit
Tausenderpunkt und Dezimaltrennzeichen formatieren, wenn mögöich noch mit
einem Währungskennzeichen. Leider habe ich dafür noch keine Formatierung
gefunden, oder muss ich mr dazu wirklich eine eigene Funktion programmieren
?

Gruß Werner :-)
Andreas Kretschmer
2006-05-28 16:38:08 UTC
Permalink
Post by Werner Knapp
für die Datenausgabe im QueryBrowser möchte ich einen Zahlenwert mit
Tausenderpunkt und Dezimaltrennzeichen formatieren, wenn mögöich noch mit
einem Währungskennzeichen. Leider habe ich dafür noch keine Formatierung
gefunden, oder muss ich mr dazu wirklich eine eigene Funktion programmieren
?
Schau mal, ob es nicht sowas wie to_char() gibt. Demo:

test=# SELECT to_char(123123123.45, 'FML 999G999G999D00');
to_char
--------------------
EUR 123.123.123,45
(1 row)




end
Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Werner Knapp
2006-05-28 16:55:30 UTC
Permalink
???
Frank Schenk
2006-05-28 17:17:50 UTC
Permalink
Post by Andreas Kretschmer
test=# SELECT to_char(123123123.45, 'FML 999G999G999D00');
to_char
--------------------
EUR 123.123.123,45
(1 row)
Bitte weitergehen, es gibt nichts zu sehen.


Andreas, das hier ist die MySQL-NG, nicht die Postgres-NG. Geht das
irgendwann in deinen Kopf oder muss man deinen Missionierungseifer
weiterhin hier ertragen?


@OP: Ein Blick ins Handbuch hätte nicht geschadet:

12.3. String Functions
http://dev.mysql.com/doc/refman/4.1/en/string-functions.html

Speziell für deinen Fall:

FORMAT(X,D)

Formats the number X to a format like '#,###,###.##', rounded to D
decimal places, and returns the result as a string. If D is 0, the
result has no decimal point or fractional part.

mysql> SELECT FORMAT(12332.123456, 4);
-> '12,332.1235'
mysql> SELECT FORMAT(12332.1,4);
-> '12,332.1000'
mysql> SELECT FORMAT(12332.2,0);
-> '12,332'

Das wird aber vermutlich nicht ganz das sein, was du möchtest, du wirst
also nicht umhin kommen, die Daten in deiner Programmiersprache zu
formatieren.

gruß, Frank
Andreas Kretschmer
2006-05-28 17:44:59 UTC
Permalink
Post by Frank Schenk
Post by Andreas Kretschmer
test=# SELECT to_char(123123123.45, 'FML 999G999G999D00');
to_char
--------------------
EUR 123.123.123,45
(1 row)
Bitte weitergehen, es gibt nichts zu sehen.
Jein.
Post by Frank Schenk
Andreas, das hier ist die MySQL-NG, nicht die Postgres-NG. Geht das
Das mag schon sein, aber ein Blick über den Tellerrand kann manchmal
auch Dinge eröffnen, die man sonst nicht sieht. Mit dem Hinweis auf
to_char() sollte das Finden von
Post by Frank Schenk
12.3. String Functions
http://dev.mysql.com/doc/refman/4.1/en/string-functions.html
nun wohl leichter sein.


end
Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Werner Knapp
2006-05-28 22:52:52 UTC
Permalink
Hallo Frank,

danke für die Info. Der Blick ins Handbuch war schon da und
Format(X,D) kenne ich. Leider löst das nicht mein Problem.
Ich möchte lediglich einen Zahlenwert in einem halbwegs
vernünftigen deutschen Format darstellen wie es andere
Datenbanken auch können, z.B. 1.425,76 EUR.

Gruß Werner
Axel Schwenke
2006-05-29 10:36:27 UTC
Permalink
Post by Werner Knapp
danke für die Info. Der Blick ins Handbuch war schon da und
Format(X,D) kenne ich. Leider löst das nicht mein Problem.
Es löst dein Problem zur Hälfte. Mußt du halt noch die Dezimal- und
Tausendertrenner umwandeln. Wozu glaubst du, sind die ganzen String-
funktionen zum Suchen und Ersetzen da?
Post by Werner Knapp
Ich möchte lediglich einen Zahlenwert in einem halbwegs
vernünftigen deutschen Format darstellen wie es andere
Datenbanken auch können, z.B. 1.425,76 EUR.
Ich kenne keine Datenbank, die das macht. Formatierung der Daten ist
Aufgabe der Applikation, nicht der Datenbank. Eventuell kann die Daten-
bank der Applikation dabei helfen (mit Funktionen wie DATE_FORMAT()),
aber die Information, in welche Form konvertiert werden soll, muß die
Applikation liefern.


XL
Andreas Kretschmer
2006-05-29 11:14:39 UTC
Permalink
Post by Axel Schwenke
Post by Werner Knapp
Ich möchte lediglich einen Zahlenwert in einem halbwegs
vernünftigen deutschen Format darstellen wie es andere
Datenbanken auch können, z.B. 1.425,76 EUR.
Ich kenne keine Datenbank, die das macht.
Das spricht nicht gerade für Dich...


end
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Werner Knapp
2006-05-29 12:33:51 UTC
Permalink
naja.. bei Postgres (auch ne Datenbank) geht es zum Beispiel so:

to_char(123123123.45, 'FML 999G999G999D00')
Andreas Scherbaum
2006-05-29 12:39:49 UTC
Permalink
Post by Axel Schwenke
Post by Werner Knapp
Ich möchte lediglich einen Zahlenwert in einem halbwegs
vernünftigen deutschen Format darstellen wie es andere
Datenbanken auch können, z.B. 1.425,76 EUR.
Ich kenne keine Datenbank, die das macht.
Das sagt nichts aus, wenn du keine kennst.
Ein Blick über den Tellerrand bewirkt manchmal Wunder.
Post by Axel Schwenke
Formatierung der Daten ist Aufgabe der Applikation, nicht der Datenbank.
Wo steht das denn geschrieben?
Und warum bietet dann Mysql (und jede andere Datenbank) einen Haufen
Funktionen, um Daten umzuformatieren und anders darzustellen?

Nur das Mysql hier nichts passendes kennt, heisst nicht, das man
ganz allgemein nicht eine Menge Formatierung gleich in der DB
erledigen kann.


Bye
--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)
Andreas Kretschmer
2006-05-29 13:59:49 UTC
Permalink
Post by Andreas Scherbaum
Post by Axel Schwenke
Formatierung der Daten ist Aufgabe der Applikation, nicht der Datenbank.
Nur das Mysql hier nichts passendes kennt, heisst nicht, das man
ganz allgemein nicht eine Menge Formatierung gleich in der DB
erledigen kann.
Du hast das nicht verstanden:
Unter MySQL muß sich halt die Applikation drum kümmern, genau so wie sie
sich darüm kümmern muß, daß keiner den 31.02.2006 als Datum erfaßt und
auch, daß referentielle Integrität zwischen Tabellen gewahrt bleibt...
Warum eigentlich überläßt MySQL nicht gleich der Applikation das
Speichern der Daten, schließlich dürfte diese ja am besten wissen, ob
sie die Daten noch mal braucht?

SCNR und so...


end
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Kai Ruhnau
2006-05-29 22:03:49 UTC
Permalink
Post by Andreas Kretschmer
Post by Andreas Scherbaum
Post by Axel Schwenke
Formatierung der Daten ist Aufgabe der Applikation, nicht der Datenbank.
Nur das Mysql hier nichts passendes kennt, heisst nicht, das man
ganz allgemein nicht eine Menge Formatierung gleich in der DB
erledigen kann.
Unter MySQL muß sich halt die Applikation drum kümmern, genau so wie sie
sich darüm kümmern muß, daß keiner den 31.02.2006 als Datum erfaßt und
auch, daß referentielle Integrität zwischen Tabellen gewahrt bleibt...
Warum eigentlich überläßt MySQL nicht gleich der Applikation das
Speichern der Daten, schließlich dürfte diese ja am besten wissen, ob
sie die Daten noch mal braucht?
SCNR und so...
Und PostgreSQL ist *so* langsam, dass sie selber MySQL einsetzen.

Grüße
Kai
--
This signature is left as an exercise for the reader.
Johannes Vogel
2006-05-29 22:22:11 UTC
Permalink
Hi
Post by Kai Ruhnau
Post by Andreas Kretschmer
Post by Andreas Scherbaum
Post by Axel Schwenke
Formatierung der Daten ist Aufgabe der Applikation, nicht der Datenbank.
Nur das Mysql hier nichts passendes kennt, heisst nicht, das man
ganz allgemein nicht eine Menge Formatierung gleich in der DB
erledigen kann.
Unter MySQL muß sich halt die Applikation drum kümmern, genau so wie sie
sich darüm kümmern muß, daß keiner den 31.02.2006 als Datum erfaßt und
auch, daß referentielle Integrität zwischen Tabellen gewahrt bleibt...
Warum eigentlich überläßt MySQL nicht gleich der Applikation das
Speichern der Daten, schließlich dürfte diese ja am besten wissen, ob
sie die Daten noch mal braucht?
Und PostgreSQL ist *so* langsam, dass sie selber MySQL einsetzen.
Diesen Krieg könnt ihr in den verschiedenen Archiven der Newsgroups
nachlesen. Lasst also die Mühen, selbst nochmals dasselbe zu schreiben.

EOD. Johannes
Irmgard Schwenteck
2006-06-01 10:16:36 UTC
Permalink
Post by Andreas Scherbaum
Post by Axel Schwenke
Post by Werner Knapp
Ich möchte lediglich einen Zahlenwert in einem halbwegs
vernünftigen deutschen Format darstellen wie es andere
Datenbanken auch können, z.B. 1.425,76 EUR.
Ich kenne keine Datenbank, die das macht.
Das sagt nichts aus, wenn du keine kennst.
Dann nenn doch mal eine. Weder Oracle noch MS-SQL machen das. Wozu auch.
Post by Andreas Scherbaum
Post by Axel Schwenke
Formatierung der Daten ist Aufgabe der Applikation, nicht der Datenbank.
Wo steht das denn geschrieben?
*Wo* sollen denn die Daten formatiert dargestellt werden?
Wenn ich mal im Query-Browser/Query-Analyzer oder wie auch immer das
tool heißt ein paar selects austeste, dann stört es keinen Benutzer, daß
dort die Zahlen mit Punkt als Dezimaltrenner erscheinen.

Du hast *eine* Datenbank und verschiedene Client-Applikationen, die
darauf zugreifen. Diese bringen ihre eigenen Mechanismen mit, die Daten
formatiert auszugeben.
Post by Andreas Scherbaum
Und warum bietet dann Mysql (und jede andere Datenbank) einen Haufen
Funktionen, um Daten umzuformatieren und anders darzustellen?
Klar kannst Du mit diversen Stringfunktionen eine Ausgabe wie '1000,00
EUR' erzeugen.
Aber Du hast dann eben einen String als Ergebnis.
Und dann versuch mal z.B. mit PHP mit diesen Daten weiterzurechnen oder
solche Ausgabe zu sortieren.
Dann ist '50' nämlich größer als '100'.
Post by Andreas Scherbaum
Nur das Mysql hier nichts passendes kennt, heisst nicht, das man
ganz allgemein nicht eine Menge Formatierung gleich in der DB
erledigen kann.
*in* der Datenbank? D.h. Du willst die Dezimalzahl 1000,00 lieber als
String '1000,00 EUR' abspeichern?

Gruß
Irmgard
Andreas Scherbaum
2006-06-01 12:55:56 UTC
Permalink
Post by Irmgard Schwenteck
Post by Andreas Scherbaum
Post by Axel Schwenke
Post by Werner Knapp
Ich möchte lediglich einen Zahlenwert in einem halbwegs
vernünftigen deutschen Format darstellen wie es andere
Datenbanken auch können, z.B. 1.425,76 EUR.
Ich kenne keine Datenbank, die das macht.
Das sagt nichts aus, wenn du keine kennst.
Dann nenn doch mal eine. Weder Oracle noch MS-SQL machen das. Wozu auch.
Lies mal ein paar Antworten weiter oben nach, es wurden sogar
Beispiele für Datenbanken gebracht, die das können.
Btw, auch Oracle kennt to_number() zum Formatieren ...
Post by Irmgard Schwenteck
Post by Andreas Scherbaum
Post by Axel Schwenke
Formatierung der Daten ist Aufgabe der Applikation, nicht der Datenbank.
Wo steht das denn geschrieben?
[...]
Du hast *eine* Datenbank und verschiedene Client-Applikationen, die
darauf zugreifen. Diese bringen ihre eigenen Mechanismen mit, die Daten
formatiert auszugeben.
Du hast auch öfter mal *eine* Datenbank und *einen* Client.
Oder auch mal die Anforderung, das immer die gleichen Teilmengen deiner
Daten gesucht werden (Substring, Umrechnung in bestimmte Formate ect.).
Gerade in zweitem Fall wäre es unvernünftig, für jede Clientanwendung
den Code zum Formatieren neu zu schreiben.

Das dies im konkreten Fall des OP nun sowohl datenbankseitig wie auch
clientseitig erledigt werden kann, spricht nicht dafür, das man jede
Art von Formatierung immer clientseitig erledigt.
Post by Irmgard Schwenteck
Post by Andreas Scherbaum
Und warum bietet dann Mysql (und jede andere Datenbank) einen Haufen
Funktionen, um Daten umzuformatieren und anders darzustellen?
Klar kannst Du mit diversen Stringfunktionen eine Ausgabe wie '1000,00
EUR' erzeugen.
Aber Du hast dann eben einen String als Ergebnis.
Und dann versuch mal z.B. mit PHP mit diesen Daten weiterzurechnen oder
solche Ausgabe zu sortieren.
Dann ist '50' nämlich größer als '100'.
Du verwechselst hier etwas.
Entweder ich suche einen String oder ich suche einen Zahlenwert.
Auch in PHP kann ich mit '1000,00 EUR' nicht weiter rechnen, wenn ich
mir den Wert einmal zurechtformatiert habe.
Wenn du in deinem Code die Anforderung hast, das an der Stelle der
Wert fertig formatiert ist, dann rechnest du später nicht mehr mit
diesem Wert.

Abgesehen davon, das Wert und Einheit im Idealfall aus zwei verschiedenen
Spalten oder gar Tabellen kommen und somit auch getrennt ausgegeben
werden können.
Post by Irmgard Schwenteck
Post by Andreas Scherbaum
Nur das Mysql hier nichts passendes kennt, heisst nicht, das man
ganz allgemein nicht eine Menge Formatierung gleich in der DB
erledigen kann.
*in* der Datenbank? D.h. Du willst die Dezimalzahl 1000,00 lieber als
String '1000,00 EUR' abspeichern?
"in" as in: beim Abfragen der Daten. Ich dachte, soweit wäre das
klar gewesen, aber offensichtlich nicht.
Wert und Einheit in einer Spalte sind nicht sehr normalisiert
und lassen sich auch schlecht weiterverarbeiten.


Bye
--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)
Loading...