Datenbank.Anleitung

In SQL Server können Sie die T-SQL-Funktion FORMAT() verwenden, um Werte wie Zahlen und Datumsangaben als formatierte Zeichenketten zurückzugeben.

Sie geben den zu formatierenden Wert und das zu verwendende Format an. Die Funktion akzeptiert ein optionales Argument, mit dem Sie eine Kultur angeben können, die bei der Formatierung des Wertes verwendet werden soll.

Syntax

Die Syntax sieht folgendermaßen aus:

FORMAT ( value, format )

Wobei value der Wert ist, der formatiert werden soll, und format eine gültige Formatzeichenfolge ist, die das gewünschte Format angibt.

Das optionale Argument culture kann verwendet werden, um eine Kultur anzugeben. Wird es weggelassen, wird die Sprache der aktuellen Sitzung verwendet.

Die Funktion FORMAT ist nicht deterministisch.

Beispiel 1 – Eine Zahl formatieren

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 als Formatzeichenfolge verwendet. Dies ist ein standardmäßiger numerischer Formatbezeichner für die Ausgabe des Wertes als Zahl. Dieser spezielle Formatbezeichner führt dazu, dass die Ausgabe mit ganzen und dezimalen Ziffern, Gruppentrennzeichen und einem Dezimaltrennzeichen mit optionalem negativen Vorzeichen formatiert wird. Die Groß- und Kleinschreibung wird nicht beachtet, also ist entweder N oder n in Ordnung.

Beispiel 2 – Zu einer Währung formatieren

Hier ist ein Beispiel für die Formatierung einer Zahl als Währung:

SELECT FORMAT(1, 'C') AS Result;

Ergebnis:

+----------+| Result ||----------|| $1.00 |+----------+

Mehr Zahlenformate

Es gibt noch viele weitere Formatzeichenfolgen, die mit der Funktion FORMAT() verwendet werden können. Zum Beispiel gibt es Format-Strings für Prozent, Festkomma, Exponential (wissenschaftlich), Hexadezimal und mehr.

Die numerischen Formatzeichenketten werden in Standard und Benutzerdefiniert unterschieden.

In den folgenden beiden Artikeln werden alle numerischen Formatzeichenfolgen mit Beispielen aufgelistet:

  • Standard-Zahlenformatzeichenfolgen
  • Benutzerdefinierte Zahlenformatzeichenfolgen

Weitere Beispiele für die Formatierung von Zahlen finden Sie auch unter Wie man Zahlen in SQL Server formatiert.

Beispiel 3 – Formatieren eines Datums

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, das ein langes Datumsmuster angibt.

Weitere Datumsformate

Es gibt noch viele weitere Format-Strings, die zur Formatierung von Datumsangaben verwendet werden können. Wie bei den numerischen Formatzeichenketten werden auch die Datums- und Zeitformatzeichenketten in Standard- und benutzerdefinierte Zeichenketten unterteilt, so dass Sie Ihre eigenen benutzerdefinierten Formate erstellen oder auf ein Standardformat zurückgreifen können.

In den folgenden beiden Artikeln sind alle Datums- und Zeitformatzeichenfolgen mit Beispielen aufgeführt:

  • Standard-Datums- und Zeitformatzeichenfolgen
  • Benutzerdefinierte Datums- und Zeitformatzeichenfolgen

Weitere Beispiele finden Sie auch unter Wie man das Datum & Zeit in SQL Server formatiert.

Beispiel 4 – Das optionale Kultur-Argument

Hier ist ein Beispiel für die Verwendung des culture-Arguments, 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 |+----------+------------+---------+

Die FORMAT()-Funktion akzeptiert jede Kultur, die vom .NET Framework unterstützt wird, als Argument; sie ist nicht auf die von SQL Server explizit unterstützten Sprachen beschränkt.

Wenn Sie dieses Argument nicht angeben, wird die Sprache der aktuellen Sitzung verwendet.

Weitere Beispiele finden Sie unter Wie Spracheinstellungen Ihre FORMAT() Ergebnisse beeinflussen können.

Beispiel 5 – Ungültiges Kultur-Argument

Wenn Sie eine ungültige Kultur angeben, erhalten Sie einen Fehler:

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 liefert die Funktion jedoch NULL. Das passiert zum Beispiel, wenn ich einen ungültigen Wert zum Formatieren anbiete:

SELECT FORMAT(GETDATE(), 'C') AS 'Result';

Ergebnis:

+----------+| Result ||----------|| NULL |+----------+

In diesem Fall habe ich versucht, ein Datum in eine Währung zu formatieren, und deshalb war das Ergebnis NULL.

Gültige Datentypen

FORMAT() verlässt sich auf das Vorhandensein der .NET Framework Common Language Runtime (CLR) und verwendet die CLR-Formatierungsregeln.

Die folgenden Datentypen können mit der FORMAT()-Funktion formatiert werden. Diese Liste enthält die akzeptablen Datentypen für den Eingabestring zusammen mit ihren .NET Framework Mapping-Äquivalenztypen.

Kategorie Typ .NET-Typ
Numerisch bigint Int64
Numerisch int Int32 Numerisch smallint Int16 Numerisch tinyint Byte
Numerisch Dezimal SqlDecimal
Numerisch Numerisch SqlDecimal
Numerisch Float Double
Numerisch real Single
Numerisch smallmoney Decimal
Numerisch Geld Dezimal
Datum und Uhrzeit Datum DateTime
Datum und Uhrzeit Zeit TimeSpan
Datum und Uhrzeit datetime DateTime
Datum und Uhrzeit smalldatetime DateTime
Datum und Uhrzeit datetime2 DateTime
Datum und Uhrzeit datetimeoffset DateTimeOffset

Escaping von Doppelpunkten und Punkten für den Datentyp ‚time‘

Bei Verwendung von FORMAT, müssen Doppelpunkte und Punkte escaped werden (dies entspricht den Formatierungsregeln der CLR). Wenn also der Format-String (zweiter Parameter) einen Doppelpunkt oder einen Punkt enthält, muss der Doppelpunkt oder der Punkt mit einem Backslash escaped werden, wenn ein Eingabewert (erster Parameter) vom Datentyp Zeit ist.

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 |+--------------------+-------------+-----------+

Der unescapte String liefert also erwartungsgemäß NULL.

Wie erwähnt, gilt dies nur für den Datentyp Zeit. Wenn wir den Eingabewert in einen anderen Datentyp ändern, brauchen wir ihn nicht zu escapen:

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 in Ordnung, ohne es zu escapen.

Sie können den Backslash auch verwenden, um ein beliebiges anderes Zeichen zu escapen, das in der Ergebniszeichenkette enthalten sein soll und sonst als Formatspezifikation interpretiert werden würde. Das Voranstellen eines Zeichens mit einem Backslash bedeutet, dass das folgende Zeichen ein Zeichenliteral ist, das unverändert in die Ergebniszeichenkette aufgenommen werden soll.

In einer benutzerdefinierten Datums- und Zeitformatzeichenkette werden die dfFghHKmMstyz:, oder / Zeichen werden als benutzerdefinierte Formatspezifikationen und nicht als literale Zeichen interpretiert.

In einer benutzerdefinierten numerischen Formatzeichenkette werden die #0.,% und werden als Formatbezeichner und nicht als literale Zeichen interpretiert. Die Groß- und Kleinbuchstaben E sowie die Symbole + und - können je nach ihrer Position innerhalb der Formatzeichenkette ebenfalls als Formatspezifikation interpretiert werden.

Wenn Sie einen Backslash in den Ergebnisstring einfügen müssen, geben Sie ihn mit einem weiteren Backslash aus.

Remoting

Die Funktion FORMAT() kann nicht remoted werden, da sie vom Vorhandensein der CLR abhängig ist. Das Remoten einer Funktion, die die CLR benötigt, könnte einen Fehler auf dem Remote-Server verursachen.

Wann sollte die Funktion FORMAT() verwendet werden

Microsoft empfiehlt, dass die Funktion FORMAT() für die lokalisierte Formatierung von Datums-/Zeit- und Zahlenwerten als Strings verwendet wird, und dass für allgemeine Datentypkonvertierungen entweder die CAST()-Funktion oder die CONVERT()-Funktion verwendet werden sollte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.