zahlenformate

zahlenformate

am 28.05.2006 18:03:37 von Werner Knapp

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 :-)

Re: zahlenformate

am 28.05.2006 18:38:08 von Andreas Kretschmer

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)

Re: zahlenformate

am 28.05.2006 18:55:30 von Werner Knapp

???

Re: zahlenformate

am 28.05.2006 19:17:50 von Frank Schenk

Andreas Kretschmer wrote:
> 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)

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

Re: zahlenformate

am 28.05.2006 19:44:59 von Andreas Kretschmer

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)

Re: zahlenformate

am 29.05.2006 00:52:52 von Werner Knapp

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

Re: zahlenformate

am 29.05.2006 12:36:27 von Axel Schwenke

"Werner Knapp" wrote:
>
> 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?

> 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

Re: zahlenformate

am 29.05.2006 13:14:39 von Andreas Kretschmer

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

Re: zahlenformate

am 29.05.2006 14:33:51 von Werner Knapp

naja.. bei Postgres (auch ne Datenbank) geht es zum Beispiel so:

to_char(123123123.45, 'FML 999G999G999D00')

Re: zahlenformate

am 29.05.2006 14:39:49 von Andreas Scherbaum

Axel Schwenke wrote:
> "Werner Knapp" wrote:
>>
>> 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.


> 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)

Re: zahlenformate

am 29.05.2006 15:59:49 von Andreas Kretschmer

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

Re: zahlenformate

am 30.05.2006 00:03:49 von Kai Ruhnau

Andreas Kretschmer wrote:
> begin Andreas Scherbaum schrieb:
>>> 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...

Und PostgreSQL ist *so* langsam, dass sie selber MySQL einsetzen.

Grüße
Kai

--
This signature is left as an exercise for the reader.

Re: zahlenformate

am 30.05.2006 00:22:11 von Johannes Vogel

Hi

Kai Ruhnau wrote:
> Andreas Kretschmer wrote:
>> begin Andreas Scherbaum schrieb:
>>>> 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?
> 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

Re: zahlenformate

am 01.06.2006 12:16:36 von Irmgard Schwenteck

Andreas Scherbaum schrieb:
>>> 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.

>> 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.

> 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'.

> 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

Re: zahlenformate

am 01.06.2006 14:55:56 von Andreas Scherbaum

Irmgard Schwenteck wrote:
> Andreas Scherbaum schrieb:
>>>> 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 ...


>>> 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.


>> 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.


>> 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)