SQL Server bietet uns eine schnelle und einfache Möglichkeit, Zahlen mit an der entsprechenden Stelle eingefügten Kommas zu formatieren. Beispiel:1234,56 kann 1.234,56 werden . Oder es kann 1.234,56 werden , falls dies das Gebietsschema ist, das Sie verwenden.
Beispiel
Wir können das FORMAT()
verwenden Funktion zum Formatieren von Zahlen mit Kommas. Wenn wir diese Funktion verwenden, übergeben wir die Zahl und einen Formatstring. Die Formatzeichenfolge bestimmt, wie die Zahl bei der Rückgabe formatiert wird.
Das FORMAT()
Die Funktion gibt basierend auf den von uns bereitgestellten Werten eine formatierte Zeichenfolgendarstellung der Zahl zurück.
Hier ist ein Beispiel zur Veranschaulichung:
SELECT
FORMAT(123456.789, 'N') AS "Number",
FORMAT(123456.789, 'P') AS "Percent",
FORMAT(123456.789, 'C') AS "Currency";
Ergebnis:
+------------+----------------+-------------+ | Number | Percent | Currency | |------------+----------------+-------------| | 123,456.79 | 12,345,678.90% | $123,456.79 | +------------+----------------+-------------+
Dieses Beispiel demonstriert drei der standardmäßigen numerischen Formatzeichenfolgen:
- Wenn wir nur die formatierte Zahl wollen, können wir
N
verwenden - Wenn wir möchten, dass es als Prozentsatz formatiert wird, können wir
P
verwenden - Für die Währung können wir
C
verwenden .
SQL Server ist intelligent genug, um Ihr aktuelles Gebietsschema (basierend auf der Sprache der aktuellen Sitzung) zu kennen, und formatiert das Ergebnis gemäß den Konventionen dieses Gebietsschemas. Dies ist wichtig, da nicht jeder in einem Land lebt, das ein Komma als Tausendertrennzeichen und einen Punkt als Dezimaltrennzeichen
verwendet
Weiterhin das FORMAT()
Die Funktion akzeptiert ein drittes optionales „Kultur“-Argument, mit dem Sie das Gebietsschema explizit angeben können.
Hier ist ein Beispiel dafür, was ich meine:
SELECT
FORMAT(123456.789, 'N', 'de-de') AS "Number",
FORMAT(123456.789, 'P', 'de-de') AS "Percent",
FORMAT(123456.789, 'C', 'de-de') AS "Currency";
Ergebnis:
+------------+-----------------+--------------+ | Number | Percent | Currency | |------------+-----------------+--------------| | 123.456,79 | 12.345.678,90 % | 123.456,79 € | +------------+-----------------+--------------+
In diesem Fall gebe ich de-de
an wie die Kultur, was bedeutet, dass die Ergebnisse nach deutschen Konventionen formatiert werden. Wir können sehen, dass Punkte als Gruppentrennzeichen verwendet werden und ein Komma als Dezimaltrennzeichen .
Wenn das dritte Argument weggelassen wird, wird die Sprache der aktuellen Sitzung verwendet.
Benutzerdefinierte Formatzeichenfolgen
Es ist auch möglich, benutzerdefinierte Formatbezeichner zu verwenden, um Ihre eigenen benutzerdefinierten Formatzeichenfolgen zu erstellen. Beispiel:#
Zeichen ist ein Ziffernplatzhalter, die 0
ein Nullplatzhalter ist, das Komma (,
) ist ein Platzhalter für das Gruppentrennzeichen und der Punkt (.
) ist ein Platzhalter für das Dezimaltrennzeichen .
Dies gilt unabhängig vom verwendeten Gebietsschema – SQL Server ermittelt basierend auf dem aktuellen Gebietsschema, welche Zeichen für die Gruppen- und Dezimaltrennzeichen zu verwenden sind.
Beispiel:
SELECT
FORMAT(123456.789, '###,###,###.##', 'en-us') AS "US English",
FORMAT(123456.789, '###,###,###.##', 'de-de') AS "German";
Ergebnis:
+--------------+------------+ | US English | German | |--------------+------------| | 123,456.79 | 123.456,79 | +--------------+------------+
In beiden Fällen habe ich dieselbe Formatzeichenfolge verwendet, SQL Server gab jedoch die Gruppen- und Dezimaltrennzeichen zurück, die für das angegebene Gebietsschema galten (das mit dem dritten „Kultur“-Argument angegeben wurde).
Im obigen Beispiel enthält die Formatzeichenfolge mehr Ziffern als die eigentliche Zahl. Unabhängig davon entschied sich SQL Server dafür, keine führenden Nullen zurückzugeben. Das liegt daran, dass wir den #
verwendet haben Formatbezeichner.
Wenn wir möchten, dass SQL Server führende Nullen zurückgibt, können wir den 0
verwenden Formatbezeichner:
SELECT
FORMAT(123456.789, '000,000,000.00', 'en-us') AS "US English",
FORMAT(123456.789, '000,000,000.00', 'de-de') AS "German";
Ergebnis:
+----------------+----------------+ | US English | German | |----------------+----------------| | 000,123,456.79 | 000.123.456,79 | +----------------+----------------+