Discussion:
Währungsformatierung mit SQL
(zu alt für eine Antwort)
Robert Lehmann
2007-01-10 14:43:17 UTC
Permalink
Hallo!

Gibt es eine Möglichkeit eine SQL-Abfrage zu generieren, welche eine
"vernünftig" formatierte Währung zurückgibt?

Konkret soll z.B. "SELECT 1234.56789 AS Preis" so formatiert werden, dass
als Resultat "1.234,57 ?" zurückgegeben wird.
Bei einer Konvertierung mit "CONVERT( money, 1234.56789, 1 )" wird lediglich
"1234.5679" zurückgegeben, also ohne Punkt als Tausender-Trennzeichen, einem
Punkt statt einem Komma als Dezimaltrenner und vier anstatt 2
Nachkommastellen.

Vielen Dank schonmal im Voraus für die Hilfe!



Mit freundlichem Gruß

Robert Lehmann
Jens
2007-01-10 15:26:30 UTC
Permalink
Hallo,

Formatierung sollte eine Aufgabe des Frontends sein, nicht des Servers.


HTH, Jens K. Suessmeyer.

---
http://www.sqlserver2005.de
---
Thomas H.
2007-01-11 07:21:00 UTC
Permalink
Hallo Robert
Post by Robert Lehmann
Gibt es eine Möglichkeit eine SQL-Abfrage zu generieren, welche eine
"vernünftig" formatierte Währung zurückgibt?
Konkret soll z.B. "SELECT 1234.56789 AS Preis" so formatiert werden, dass
als Resultat "1.234,57 ?" zurückgegeben wird.
Bei einer Konvertierung mit "CONVERT( money, 1234.56789, 1 )" wird lediglich
"1234.5679" zurückgegeben, also ohne Punkt als Tausender-Trennzeichen, einem
Punkt statt einem Komma als Dezimaltrenner und vier anstatt 2
Nachkommastellen.
prinzipiell gebe ich Jens recht, dass dies Sache des Clients ist. Trotzdem
hier noch ein Beispiel:
SELECT convert(varchar, round(cast(1234.56789 as money), 2), 1) AS Preis

Viele Grüße
Thomas
Robert Lehmann
2007-01-11 07:32:27 UTC
Permalink
Post by Thomas H.
Hallo Robert
Post by Robert Lehmann
Gibt es eine Möglichkeit eine SQL-Abfrage zu generieren, welche eine
"vernünftig" formatierte Währung zurückgibt?
Konkret soll z.B. "SELECT 1234.56789 AS Preis" so formatiert werden, dass
als Resultat "1.234,57 ?" zurückgegeben wird.
Bei einer Konvertierung mit "CONVERT( money, 1234.56789, 1 )" wird lediglich
"1234.5679" zurückgegeben, also ohne Punkt als Tausender-Trennzeichen, einem
Punkt statt einem Komma als Dezimaltrenner und vier anstatt 2
Nachkommastellen.
prinzipiell gebe ich Jens recht, dass dies Sache des Clients ist. Trotzdem
SELECT convert(varchar, round(cast(1234.56789 as money), 2), 1) AS Preis
Viele Grüße
Thomas
Danke für die Hilfe!

Das mit dem Client sehe ich ja auch so, nur wäre es in meinem Fall sinnvoll
bereits die korrekt formatierten Daten vom Server auszugeben.

MfG Robert
Christa Kurschat
2007-01-11 08:06:31 UTC
Permalink
Hallo Robert,
Post by Robert Lehmann
Post by Thomas H.
Hallo Robert
Post by Robert Lehmann
Gibt es eine Möglichkeit eine SQL-Abfrage zu generieren,
welche eine "vernünftig" formatierte Währung zurückgibt?
Konkret soll z.B. "SELECT 1234.56789 AS Preis" so formatiert
werden, dass als Resultat "1.234,57 ?" zurückgegeben wird.
Bei einer Konvertierung mit "CONVERT( money, 1234.56789, 1
)" wird lediglich
"1234.5679" zurückgegeben, also ohne Punkt als
Tausender-Trennzeichen, einem
Punkt statt einem Komma als Dezimaltrenner und vier anstatt 2
Nachkommastellen.
prinzipiell gebe ich Jens recht, dass dies Sache des Clients
SELECT convert(varchar, round(cast(1234.56789 as money), 2),
1) AS Preis
Viele Grüße
Thomas
Danke für die Hilfe!
Das mit dem Client sehe ich ja auch so, nur wäre es in meinem
Fall sinnvoll bereits die korrekt formatierten Daten vom
Server auszugeben.
Mit diesen Daten kannst Du aber nicht mehr rechnen, da sie nach varchar
konvertiert wurden.
Im übrigen fehlt bei Thomas Löung noch Dein Eurozeichen, also:

SELECT convert(varchar, round(cast(1234.56789 as money), 2), 1) + ' ?' AS
Preis

Gruß
Christa
--
Access-FAQ: http://www.donkarl.com
SQL-Server-FAQ: www.sqlfaq.de
InsideSql: www.insidesql.de
Suchen in den Newsgroups:
http://groups.google.de/advanced_group_search?hl=de&lr=&ie=UTF-8
Robert Lehmann
2007-01-11 08:43:47 UTC
Permalink
Hallo!

Also vielen Dank für die Hilfe. Dass ich mit den Daten nicht mehr rechnen
kann, ist für den Anwendungszweck nicht relevant.
Um ein korrekt formatiertes Währungsformat (also auch mit den korrekten
Trennzeichen) zu bekommen, habe ich jetzt beispielsweise
"SELECT Replace(Replace(Replace((convert(varchar, round(cast(1234.56789 as
money), 2), 1) + ' ?'),',','+'), '.', ','), '+', '.') AS Preis"
angegeben. Die Replace-Funktionen sollen dabei das Tausender- und das
Dezimaltrennzeichen korrekt ersetzen.
Funktioneirt wunderbar.

MfG Robert
Post by Christa Kurschat
Hallo Robert,
Post by Robert Lehmann
Post by Thomas H.
Hallo Robert
Post by Robert Lehmann
Gibt es eine Möglichkeit eine SQL-Abfrage zu generieren,
welche eine "vernünftig" formatierte Währung zurückgibt?
Konkret soll z.B. "SELECT 1234.56789 AS Preis" so formatiert
werden, dass als Resultat "1.234,57 ?" zurückgegeben wird.
Bei einer Konvertierung mit "CONVERT( money, 1234.56789, 1
)" wird lediglich
"1234.5679" zurückgegeben, also ohne Punkt als
Tausender-Trennzeichen, einem
Punkt statt einem Komma als Dezimaltrenner und vier anstatt 2
Nachkommastellen.
prinzipiell gebe ich Jens recht, dass dies Sache des Clients
SELECT convert(varchar, round(cast(1234.56789 as money), 2), 1) AS Preis
Viele Grüße
Thomas
Danke für die Hilfe!
Das mit dem Client sehe ich ja auch so, nur wäre es in meinem
Fall sinnvoll bereits die korrekt formatierten Daten vom
Server auszugeben.
Mit diesen Daten kannst Du aber nicht mehr rechnen, da sie nach varchar
konvertiert wurden.
SELECT convert(varchar, round(cast(1234.56789 as money), 2), 1) + ' ?' AS
Preis
Gruß
Christa
--
Access-FAQ: http://www.donkarl.com
SQL-Server-FAQ: www.sqlfaq.de
InsideSql: www.insidesql.de
http://groups.google.de/advanced_group_search?hl=de&lr=&ie=UTF-8
Loading...