Ich führe einige administrative Abfragen aus und kompiliere Ergebnisse aus sp_spaceused
SQL Server 2008, um die Daten- / Indexbereichsverhältnisse einiger Tabellen in meiner Datenbank zu überprüfen. Natürlich bekomme ich alle möglichen großen Zahlen in den Ergebnissen und meine Augen beginnen zu beschönigen. Es wäre sehr praktisch, wenn ich all diese Zahlen mit Kommas formatieren könnte (987654321 wird zu 987.654.321). Es ist komisch, dass in all den vielen Jahren, in denen ich SQL Server verwendet habe, dieses Problem nie aufgetreten ist , da ich die meiste Zeit auf der Präsentationsebene formatiert habe. In diesem Fall ist das T-SQL-Ergebnis in SSMS jedoch die Präsentation.
Ich habe darüber nachgedacht, nur eine einfache CLR-UDF zu erstellen, um dies zu lösen, aber es scheint, dass dies in einfachem alten T-SQL möglich sein sollte. Also werde ich hier die Frage stellen: Wie macht man die numerische Formatierung in Vanilla T-SQL?
quelle
Antworten:
In SQL Server 2012 und höher wird eine Zahl mit Kommas formatiert:
Sie können auch
0
die Anzahl der gewünschten Dezimalstellen ändern .quelle
format
Funktion.culture
.Während ich allen zustimme, einschließlich des OP, die sagen, dass die Formatierung in der Präsentationsebene erfolgen sollte, kann diese Formatierung in T-SQL durch Casting in
money
und anschließende Konvertierung in erfolgenvarchar
. Dies schließt jedoch nachfolgende Dezimalstellen ein, mit denen eine Schleife durchgeführt werden könnteSUBSTRING
.quelle
Ich würde empfehlen, anstelle von Teilzeichenfolge zu ersetzen, um Probleme mit der Zeichenfolgenlänge zu vermeiden:
quelle
Bei SQL Server 2012+ -Implementierungen können Sie mit FORMAT die Zeichenfolgenformatierung auf Nicht-Zeichenfolgendatentypen anwenden.
In der ursprünglichen Frage hatte der Benutzer die Möglichkeit angefordert, Kommas als Tausendertrennzeichen zu verwenden. In einer als doppelt abgeschlossenen Frage hatte der Benutzer gefragt, wie er die Währungsformatierung anwenden könne. Die folgende Abfrage zeigt, wie beide Aufgaben ausgeführt werden. Es zeigt auch die Anwendung der Kultur, um dies zu einer allgemeineren Lösung zu machen (unter Berücksichtigung der Funktion von Tsiridis Dimitris, griechische Spezialformatierungen anzuwenden).
SQLFiddle für die oben genannten
quelle
String index out of range: 33
Demo 1
Demonstriert das Hinzufügen von Kommas:
Demo 2
Zeigt Kommas und Dezimalstellen. Beachten Sie, dass bei Bedarf die letzte Ziffer gerundet wird.
Kompatibilität
SQL Server 2012+
.quelle
Bitte versuchen Sie es mit der folgenden Abfrage:
Format mit rechtem Dezimalpunkt:
quelle
FORMAT
Funktion haben, istSELECT format(123456789987654321,'###,##0')
oder einfacher,select format(123456789987654321, 'N0')
wie @ThomasMueller antwortete.Ausgabe = 9.876.543
und Sie können 9876543 durch Ihren Spaltennamen ersetzen.
quelle
Versuchte den obigen Geldtrick und dies funktioniert hervorragend für numerische Werte mit zwei oder weniger signifikanten Ziffern. Ich habe meine eigene Funktion zum Formatieren von Zahlen mit Dezimalstellen erstellt:
quelle
Dies gehört in einen Kommentar zu Phil Hunts Antwort, aber leider habe ich keinen Repräsentanten.
Um die ".00" am Ende Ihrer Zahlenfolge zu entfernen, ist der Parsename sehr praktisch. Es markiert durch Punkte getrennte Zeichenfolgen und gibt das angegebene Element zurück, beginnend mit dem Token ganz rechts als Element 1.
Ausbeuten 987.654.321
quelle
Hier ist eine weitere T-SQL-UDF
quelle
quelle
Hier ist eine Skalarfunktion, die ich verwende und die einige Fehler in einem vorherigen Beispiel (oben) behebt und auch Dezimalwerte (auf die angegebene Anzahl von Ziffern) behandelt (BEARBEITET, um auch mit 0 und negativen Zahlen zu arbeiten). Ein weiterer Hinweis: Die oben beschriebene Methode "Als Geld umwandeln" ist auf die Größe des Datentyps "GELD" beschränkt und funktioniert nicht mit 4 (oder mehr) Dezimalstellen. Diese Methode ist definitiv einfacher, aber weniger flexibel.
quelle
Eine weitere UDF, die hoffentlich allgemein genug ist und keine Annahmen darüber macht, ob Sie auf eine bestimmte Anzahl von Dezimalstellen runden möchten:
quelle
- ================================================ =================== -
/ * Diese Funktion benötigt 3 Argumente: Das erste Argument ist @Numero_str, wobei die Zahl als Dateneingabe verwendet wird, und die anderen 2 Argumente geben an, wie die Informationen für die Ausgabe formatiert werden. Diese Argumente sind @Pos_Enteros und @Pos_Decimales, die angeben, wie viele Ganzzahlen und Dezimalstellen, die Sie für die Zahl anzeigen möchten, die Sie als Eingabeargument übergeben. * /
quelle
Erstellen Sie für SQL Server vor 2012, der die FORMAT-Funktion nicht enthält, diese Funktion:
select dbo.FormatCurrency (12345678) gibt 12.345.678,00 USD zurück
Lassen Sie das $ fallen, wenn Sie nur Kommas möchten.
quelle