In SQL Server können Sie das T-SQL FORMAT()
verwenden Funktion, um Werte wie Zahlen und Datumsangaben als formatierte Zeichenfolgen zurückzugeben.
Sie geben den zu formatierenden Wert an und geben das zu verwendende Format an. Die Funktion akzeptiert ein optionales Argument, mit dem Sie eine Kultur angeben können, die beim Formatieren des Werts verwendet werden soll.
Syntax
Die Syntax lautet wie folgt:
FORMAT ( value, format [, culture ] )
Wobei value
ist der Wert, den Sie formatieren möchten, und format
ist eine gültige Formatzeichenfolge, die das gewünschte Format angibt.
Die optionale culture
Argument kann verwendet werden, um eine Kultur anzugeben. Wenn weggelassen, wird die Sprache der aktuellen Sitzung verwendet.
Das FORMAT
Funktion ist nicht deterministisch.
Beispiel 1 – Formatiere eine Zahl
Hier ist ein Beispiel für die Formatierung einer Zahl:
SELECT FORMAT(1, 'N') AS Result;
Ergebnis:
+----------+ | Result | |----------| | 1.00 | +----------+
In diesem Fall habe ich N
verwendet als Formatstring. Dies ist ein standardmäßiger numerischer Formatbezeichner für die Ausgabe des Werts als Zahl. Dieser spezielle Formatbezeichner führt dazu, dass die Ausgabe mit ganzzahligen und dezimalen Ziffern, Gruppentrennzeichen und einem Dezimaltrennzeichen mit optionalem negativen Vorzeichen formatiert wird. Bei diesem Formatbezeichner wird die Groß-/Kleinschreibung nicht beachtet, also entweder N
oder n
ist in Ordnung.
Beispiel 2 – Formatierung in eine Währung
Hier ist ein Beispiel für die Formatierung einer Zahl als Währung:
SELECT FORMAT(1, 'C') AS Result;
Ergebnis:
+----------+ | Result | |----------| | $1.00 | +----------+
Weitere Zahlenformate
Es gibt viele weitere Formatzeichenfolgen, die mit FORMAT()
verwendet werden können Funktion. Beispielsweise gibt es Formatzeichenfolgen für Prozentsätze, Festkomma, Exponential (wissenschaftlich), Hexadezimal und mehr.
Die numerischen Formatzeichenfolgen sind in Standard und Benutzerdefiniert unterteilt.
Die folgenden beiden Artikel listen alle numerischen Formatzeichenfolgen auf, einschließlich Beispiele:
- Standardzeichenfolgen für numerische Formate
- Benutzerdefinierte numerische Formatzeichenfolgen
Weitere Beispiele zum Formatieren von Zahlen finden Sie auch unter So formatieren Sie Zahlen in SQL Server.
Beispiel 3 – Formatieren Sie ein Datum
Hier ist ein Beispiel für die Formatierung eines Datums:
SELECT GETDATE() AS 'Unformatted Date', FORMAT( GETDATE(), 'D') AS 'Formatted Date';
Ergebnis:
+-------------------------+------------------------+ | Unformatted Date | Formatted Date | |-------------------------+------------------------| | 2019-05-08 06:16:55.613 | Wednesday, May 8, 2019 | +-------------------------+------------------------+
In diesem Fall habe ich D
verwendet die ein langes Datumsmuster angibt.
Weitere Datumsformate
Es gibt viele weitere Formatzeichenfolgen, die zum Formatieren von Datumsangaben verwendet werden können. Wie bei den numerischen Formatzeichenfolgen werden die Datums- und Zeitformatzeichenfolgen in Standard- und benutzerdefinierte Formate unterteilt, sodass Sie Ihre eigenen benutzerdefinierten Formate erstellen oder sich auf ein Standardformat verlassen können.
Die folgenden zwei Artikel listen alle Formatstrings für Datum und Uhrzeit auf, einschließlich Beispiele:
- Standardformatzeichenfolgen für Datum und Uhrzeit
- Benutzerdefinierte Formatzeichenfolgen für Datum und Uhrzeit
Weitere Beispiele finden Sie unter So formatieren Sie Datum und Uhrzeit in SQL Server.
Beispiel 4 – Die optionale culture
Argument
Hier ist ein Beispiel für die Verwendung von culture
Argument, um einen Wert in verschiedenen Währungen zurückzugeben:
SELECT FORMAT(1, 'C', 'fr-FR') AS 'France', FORMAT(1, 'C', 'th-TH') AS 'Thailand', FORMAT(1, 'C', 'ja-JP') AS 'Japan';
Ergebnis:
+----------+------------+---------+ | France | Thailand | Japan | |----------+------------+---------| | 1,00 € | ฿1.00 | ¥1 | +----------+------------+---------+
Das FORMAT()
Funktion akzeptiert jede Kultur, die von .NET Framework als Argument unterstützt wird; es ist nicht auf die explizit von SQL Server unterstützten Sprachen beschränkt.
Wenn Sie dieses Argument nicht angeben, wird die Sprache der aktuellen Sitzung verwendet.
Weitere Beispiele finden Sie unter Wie sich Spracheinstellungen auf Ihr FORMAT()
auswirken können Ergebnisse.
Beispiel 5 – Ungültige culture
Argument
Wenn Sie eine ungültige Kultur angeben, erhalten Sie eine Fehlermeldung:
SELECT FORMAT(1, 'C', 'oop-SS!') AS 'Oops!';
Ergebnis:
The culture parameter 'oop-SS!' provided in the function call is not supported.
Beispiel 6 – Ungültiger Formatwert
Bei anderen Fehlern gibt die Funktion jedoch NULL
zurück . Folgendes passiert beispielsweise, wenn ich einen ungültigen zu formatierenden Wert angebe:
SELECT FORMAT(GETDATE(), 'C') AS 'Result';
Ergebnis:
+----------+ | Result | |----------| | NULL | +----------+
In diesem Fall habe ich versucht, ein Datum in eine Währung zu formatieren, und daher war das Ergebnis NULL
.
Gültige Datentypen
FORMAT()
basiert auf dem Vorhandensein von .NET Framework Common Language Runtime (CLR) und verwendet die CLR-Formatierungsregeln.
Die folgenden Datentypen können mit dem FORMAT()
formatiert werden Funktion. Diese Liste enthält die akzeptablen Datentypen für die Eingabezeichenfolge zusammen mit ihren .NET Framework-Zuordnungsäquivalenttypen.
Kategorie | Typ | .NET-Typ |
---|---|---|
Numerisch | bigint | Int64 |
Numerisch | int | Int32 |
Numerisch | smallint | Int16 |
Numerisch | winzig | Byte |
Numerisch | dezimal | SqlDecimal |
Numerisch | numerisch | SqlDecimal |
Numerisch | schwimmen | Doppelt |
Numerisch | echt | Single |
Numerisch | Kleingeld | Dezimal |
Numerisch | Geld | Dezimal |
Datum und Uhrzeit | Datum | DatumUhrzeit |
Datum und Uhrzeit | Zeit | Zeitspanne |
Datum und Uhrzeit | DatumUhrzeit | DatumUhrzeit |
Datum und Uhrzeit | smalldatetime | DatumUhrzeit |
Datum und Uhrzeit | datetime2 | DatumUhrzeit |
Datum und Uhrzeit | datetimeoffset | DateTimeOffset |
Escapeing von Doppelpunkten und Punkten für den Datentyp „Zeit“
Bei Verwendung von FORMAT
, Doppelpunkte und Punkte müssen maskiert werden (dies entspricht den CLR-Formatierungsregeln). Wenn daher die Formatzeichenfolge (zweiter Parameter) einen Doppelpunkt oder Punkt enthält, muss der Doppelpunkt oder Punkt mit einem umgekehrten Schrägstrich maskiert werden, wenn ein Eingabewert (erster Parameter) die Zeit ist Datentyp.
Beispiel:
SELECT CAST('12:15' AS time) AS 'Unformatted Data', FORMAT(CAST('12:15' AS time), N'hh.mm') AS 'Unescaped', FORMAT(CAST('12:15' AS time), N'hh\.mm') AS 'Escaped';
Ergebnis:
+--------------------+-------------+-----------+ | Unformatted Data | Unescaped | Escaped | |--------------------+-------------+-----------| | 12:15:00 | NULL | 12.15 | +--------------------+-------------+-----------+
Wie erwartet gibt die Zeichenfolge ohne Escapezeichen also NULL
zurück .
Dies gilt wie erwähnt nur für die Zeit Datentyp. Wenn wir den Eingabewert in einen anderen Datentyp ändern, müssen wir ihn nicht maskieren:
SELECT CAST('12:15' AS datetime) AS 'Unformatted Data', FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Unescaped', FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Escaped';
Ergebnis:
+-------------------------+-------------+-----------+ | Unformatted Data | Unescaped | Escaped | |-------------------------+-------------+-----------| | 1900-01-01 12:15:00.000 | 12.15 | 12.15 | +-------------------------+-------------+-----------+
In diesem Fall ist der Eingabewert datetime , und daher ist das Ergebnis ohne Escapezeichen in Ordnung.
Sie können den umgekehrten Schrägstrich auch verwenden, um jedes andere Zeichen zu maskieren, das Sie in die Ergebniszeichenfolge aufnehmen möchten, das andernfalls als Formatbezeichner interpretiert würde. Ein Backslash vor einem Zeichen bedeutet, dass das folgende Zeichen ein Zeichenliteral ist, das unverändert in die Ergebniszeichenfolge aufgenommen werden soll.
In einer benutzerdefinierten Datums- und Zeitformatzeichenfolge ist der d
, f
, F
, g
, h
, H
, K
, m
, M
, s
, t
, y
, z
, :
, oder /
Zeichen werden als benutzerdefinierte Formatbezeichner und nicht als wörtliche Zeichen interpretiert.
In einer benutzerdefinierten numerischen Formatzeichenfolge ist der #
, 0
, .
, ,
, %
, und ‰
Symbole werden als Formatbezeichner und nicht als wörtliche Zeichen interpretiert. Der Groß- und Kleinbuchstabe E
sowie das +
und -
Symbole können auch als Formatbezeichner interpretiert werden, abhängig von ihrer Position innerhalb der Formatzeichenfolge.
Wenn Sie einen umgekehrten Schrägstrich in die Ergebniszeichenfolge einfügen müssen, maskieren Sie ihn mit einem weiteren umgekehrten Schrägstrich.
Remoting
Das FORMAT()
Die Funktion kann nicht entfernt werden, da sie vom Vorhandensein der CLR abhängt. Das Remoting einer Funktion, die die CLR erfordert, könnte einen Fehler auf dem Remoteserver verursachen.
Wann sollte FORMAT()
verwendet werden? Funktion
Microsoft empfiehlt, das FORMAT()
-Funktion wird für die gebietsschemaabhängige Formatierung von Datums-/Uhrzeit- und Zahlenwerten als Zeichenfolgen verwendet, und für allgemeine Datentypkonvertierungen entweder die CAST()
Funktion oder die CONVERT()
Funktion sollte stattdessen verwendet werden.