FORMAT (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric
Gibt einen mit dem angegebenen Format und der optionalen Kultur formatierten Wert zurück. Verwenden Sie die Funktion für gebietsschemabezogene FORMAT
Formatierung von Datums-/Uhrzeit- und Zahlenwerten als Zeichenfolgen. Für allgemeine Datentypkonvertierungen verwenden CAST
oder CONVERT
.
Transact-SQL-Syntaxkonventionen
Syntax
FORMAT( value , format [ , culture ] )
Argumente
value
Ausdruck eines unterstützten Datentyps, der formatiert werden soll. Eine Liste gültiger Typen finden Sie in der Tabelle im Abschnitt "Hinweise ".
format
nvarchar -Formatmuster.
Das Formatargument muss eine gültige .NET Framework-Formatzeichenfolge enthalten, entweder als Standardformatzeichenfolge (z "C"
. B. oder "D"
) oder als Muster von benutzerdefinierten Zeichen für Datumsangaben und numerische Werte (z. B "MMMM DD, yyyy (dddd)"
. ). Zusammengesetzte Formatierungen werden nicht unterstützt.
Ausführliche Erläuterungen zu diesen Formatierungsmustern können Sie der .NET Framework-Dokumentation zur allgemeinen Zeichenfolgenformatierung sowie zu benutzerdefinierten Datums- und Uhrzeitformaten und benutzerdefinierten Zahlenformaten entnehmen. Weitere Informationen finden Sie unter Formatieren von Typen in .NET.
culture
Optionales nvarchar -Argument, das eine Kultur angibt.
Wenn das Kulturargument nicht angegeben wird, wird die Sprache der aktuellen Sitzung verwendet. Diese Sprache wird entweder implizit oder explizit mithilfe der SET LANGUAGE
Anweisung festgelegt. kultur akzeptiert jede Kultur, die von .NET Framework als Argument unterstützt wird. Sie ist nicht auf die sprachen beschränkt, die von SQL Server explizit unterstützt werden. Wenn das Kulturargument ungültig ist, FORMAT
wird ein Fehler ausgelöst.
Rückgabetypen
nvarchar oder NULL.
Die Länge des Rückgabewerts wird von formatbestimmt.
Hinweise
FORMAT
gibt für andere Fehler als eine ungültige Kultur zurückNULL
. Wird beispielsweise zurückgegeben, NULL
wenn der im Format angegebene Wert ungültig ist.
Die FORMAT
Funktion ist nicht deterministisch.
FORMAT
basiert auf dem Vorhandensein der .NET Framework Common Language Runtime (CLR).
Diese Funktion kann nicht entfernt werden, da sie vom Vorhandensein der CLR abhängt. Die Remoteausführung einer Funktion, die die CLR erfordert, kann einen Fehler auf dem Remoteserver auslösen.
FORMAT
basiert auf CLR-Formatierungsregeln, die diktieren, dass Doppelpunkte und Punkte escapen müssen. Wenn daher die Formatzeichenfolge (zweiter Parameter) einen Doppelpunkt oder Punkt enthält, muss der Doppelpunkt oder punkt mit umgekehrtem Schrägstrich escapet werden, wenn ein Eingabewert (erster Parameter) den Zeitdatentyp aufweist. Weitere Informationen finden Sie unter D: FORMAT mit time-Datentypen.
In der folgenden Tabelle sind zulässige Datentypen für das value -Argument sowie die entsprechenden .NET Framework-Zuordnungstypen aufgeführt.
Category | type | .NET-Typ |
---|---|---|
Numeric | bigint | Int64 |
Numeric | int | Int32 |
Numeric | smallint | Int16 |
Numeric | tinyint | Byte |
Numeric | decimal | SqlDecimal |
Numeric | numeric | SqlDecimal |
Numeric | float | Double |
Numeric | real | Single |
Numeric | smallmoney | Decimal |
Numeric | money | Decimal |
Datum und Uhrzeit | date | DateTime |
Datum und Uhrzeit | time | TimeSpan |
Datum und Uhrzeit | datetime | DateTime |
Datum und Uhrzeit | smalldatetime | DateTime |
Datum und Uhrzeit | datetime2 | DateTime |
Datum und Uhrzeit | datetimeoffset | DateTimeOffset |
Beispiele
A. Einfaches Beispiel für FORMAT
Im folgenden Beispiel wird ein einfaches, für andere Kulturen formatiertes Datum zurückgegeben.
DECLARE @d DATE = '11/22/2020';
SELECT FORMAT(@d, 'd', 'en-US') 'US English',
FORMAT(@d, 'd', 'en-gb') 'British English',
FORMAT(@d, 'd', 'de-de') 'German',
FORMAT(@d, 'd', 'zh-cn') 'Chinese Simplified (PRC)';
SELECT FORMAT(@d, 'D', 'en-US') 'US English',
FORMAT(@d, 'D', 'en-gb') 'British English',
FORMAT(@d, 'D', 'de-de') 'German',
FORMAT(@d, 'D', 'zh-cn') 'Chinese Simplified (PRC)';
Hier sehen Sie das Ergebnis.
US English British English German Simplified Chinese (PRC)
----------- ---------------- ----------- -------------------------
8/9/2024 09/08/2024 09.08.2024 2024/8/9
US English British English German Chinese (Simplified PRC)
----------------------- ---------------- ------------------------ -------------------------
Friday, August 9, 2024 09 August 2024 Freitag, 9. August 2024 2024年8月9日
B. FORMAT mit benutzerdefinierten Formatierungszeichenfolgen
Im folgenden Beispiel ist das Formatieren von numerischen Werten durch Angeben eines benutzerdefinierten Formats dargestellt. Im Beispiel wird davon ausgegangen, dass das aktuelle Datum der 9. August 2024 ist. Weitere Informationen zu diesen und anderen benutzerdefinierten Formaten finden Sie unter Benutzerdefinierte Zahlenformatzeichenfolgen.
DECLARE @d DATE = GETDATE();
SELECT FORMAT(@d, 'dd/MM/yyyy', 'en-US') AS 'Date',
FORMAT(123456789, '###-##-####') AS 'Custom Number';
Hier sehen Sie das Ergebnis.
Date Custom Number
----------- --------------
09/08/2024 123-45-6789
C. FORMAT mit numerischen Typen
Im folgenden Beispiel werden fünf Zeilen aus der Tabelle in der Sales.CurrencyRate
AdventureWorks2022
Datenbank zurückgegeben. Die Spalte EndOfDateRate
wird als Typgeld in der Tabelle gespeichert. In diesem Beispiel wird die Spalte unformatiert zurückgegeben und wird dann durch Angeben der Typen für das .NET-Zahlenformat, das allgemeine Format und das Währungsformat formatiert. Weitere Informationen zu diesen und anderen Zahlenformaten finden Sie unter Benutzerdefinierte Zahlenformatzeichenfolgen.
SELECT TOP (5) CurrencyRateID,
EndOfDayRate,
FORMAT(EndOfDayRate, 'N', 'en-us') AS 'Numeric Format',
FORMAT(EndOfDayRate, 'G', 'en-us') AS 'General Format',
FORMAT(EndOfDayRate, 'C', 'en-us') AS 'Currency Format'
FROM Sales.CurrencyRate
ORDER BY CurrencyRateID;
Hier sehen Sie das Ergebnis.
CurrencyRateID EndOfDayRate Numeric Format General Format Currency Format
-------------- ------------ -------------- -------------- ---------------
1 1.0002 1.00 1.0002 $1.00
2 1.55 1.55 1.5500 $1.55
3 1.9419 1.94 1.9419 $1.94
4 1.4683 1.47 1.4683 $1.47
5 8.2784 8.28 8.2784 $8.28
In diesem Beispiel wird die deutsche Kultur (de-de
) angegeben.
SELECT TOP (5) CurrencyRateID,
EndOfDayRate,
FORMAT(EndOfDayRate, 'N', 'de-de') AS 'Numeric Format',
FORMAT(EndOfDayRate, 'G', 'de-de') AS 'General Format',
FORMAT(EndOfDayRate, 'C', 'de-de') AS 'Currency Format'
FROM Sales.CurrencyRate
ORDER BY CurrencyRateID;
CurrencyRateID EndOfDayRate Numeric Format General Format Currency Format
-------------- ------------ -------------- -------------- ---------------
1 1.0002 1,00 1,0002 1,00 €
2 1.55 1,55 1,5500 1,55 €
3 1.9419 1,94 1,9419 1,94 €
4 1.4683 1,47 1,4683 1,47 €
5 8.2784 8,28 8,2784 8,28 €
D: FORMAT mit time-Datentypen
FORMAT
gibt in diesen Fällen zurück NULL
, da .
sie :
nicht escaped sind.
SELECT FORMAT(cast('07:35' AS TIME), N'hh.mm'); --> returns NULL
SELECT FORMAT(cast('07:35' AS TIME), N'hh:mm'); --> returns NULL
FORMAT gibt eine formatierte Zeichenfolge zurück, da .
und :
mit Escapezeichen versehen sind.
SELECT FORMAT(cast('07:35' AS TIME), N'hh\.mm'); --> returns 07.35
SELECT FORMAT(cast('07:35' AS TIME), N'hh\:mm'); --> returns 07:35
Format gibt eine formatierte aktuelle Uhrzeit zurück, wobei AM oder PM angegeben ist.
SELECT FORMAT(SYSDATETIME(), N'hh:mm tt'); --> returns 03:46 PM
SELECT FORMAT(SYSDATETIME(), N'hh:mm t'); --> returns 03:46 P
Format gibt die angegebene Uhrzeit zurück, wobei AM angezeigt wird.
select FORMAT(CAST('2018-01-01 01:00' AS DATETIME2), N'hh:mm tt'); --> returns 01:00 AM
select FORMAT(CAST('2018-01-01 01:00' AS DATETIME2), N'hh:mm t'); --> returns 01:00 A
Format gibt die angegebene Uhrzeit zurück, wobei PM angezeigt wird.
select FORMAT(CAST('2018-01-01 14:00' AS DATETIME2), N'hh:mm tt'); --> returns 02:00 PM
select FORMAT(CAST('2018-01-01 14:00' AS DATETIME2), N'hh:mm t'); --> returns 02:00 P
Format gibt die angegebene Uhrzeit im 24-Stunden-Format zurück.
select FORMAT(CAST('2018-01-01 14:00' AS DATETIME2), N'HH:mm'); --> returns 14:00