Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was ist eine Formatzeichenfolge in SQL Server?

In SQL Server das FORMAT() Mit der Funktion können Sie Datums-/Uhrzeit- und Zahlenwerte als formatierte Zeichenfolge formatieren, indem Sie eine „Formatzeichenfolge“ als zweites Argument übergeben (das erste Argument ist der Wert, der formatiert wird).

Hier ist ein Beispiel für diese Funktion in Aktion:

FORMAT(@date, 'dd/MM/yyyy');

In diesem Fall ist der Formatstring TT/MM/JJJJ .

Diese spezielle Formatzeichenfolge gibt an, dass @date Der Wert sollte mit einem zweistelligen Tag, einem zweistelligen Monat und einem vierstelligen Jahr in dieser Reihenfolge und mit Schrägstrichen als Trennzeichen formatiert werden.

Dies würde in etwa so aussehen:

21/05/2019

Ein Format-String ist eine Zeichenfolge, die einen oder mehrere vordefinierte Formatbezeichner enthält , bei denen es sich um einzelne Zeichen oder Zeichengruppen handelt, die definieren, wie die Ausgabe formatiert werden soll.

SQL Server akzeptiert nur Formatzeichenfolgen, die von .NET Framework unterstützt werden.

Eine Formatzeichenfolge kann eine Standardformatzeichenfolge oder eine benutzerdefinierte Formatzeichenfolge sein. So funktionieren sie:

  • Ein Standardformat-String ist ein vordefinierter Formatstring. Es enthält einen einzelnen Formatbezeichner, der so interpretiert wird, dass er ein bestimmtes, vordefiniertes Format darstellt. Standardformatzeichenfolgen sind eigentlich Aliase für benutzerdefinierte Formatzeichenfolgen. Die tatsächlich verwendete benutzerdefinierte Formatzeichenfolge hängt jedoch häufig von der Kultur ab.
  • Eine benutzerdefinierte Formatzeichenfolge besteht andererseits aus einem oder mehreren benutzerdefinierten Formatbezeichnern, die in Kombination miteinander das Format definieren. Dies gibt Ihnen viel mehr Flexibilität bei der Definition, wie die Ausgabe aussehen soll.

Beispiel 1 – Standardformat-String

Hier ist ein Beispiel, um zu demonstrieren, wie Standardformatzeichenfolgen funktionieren.

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

Ergebnis:

+-----------+
| Result    |
|-----------|
| $1,234.00 |
+-----------+

In diesem Beispiel C ist der Formatstring. In diesem Fall handelt es sich um eine standardmäßige numerische Formatzeichenfolge, die aus einem einzigen Formatbezeichner besteht. Dieser spezielle Formatbezeichner wird verwendet, um einen Währungsbetrag darzustellen.

Wir könnten das gleiche Ergebnis auch erhalten, indem wir eine benutzerdefinierte numerische Formatzeichenfolge verwenden.

Beispiel 2 – Benutzerdefinierte Formatzeichenfolge

Dieses Beispiel erzeugt dieselbe Ausgabe wie das vorherige Beispiel. Der Unterschied besteht darin, dass ich in diesem Beispiel eine benutzerdefiniert verwende Format-String anstelle eines Standard-Strings.

SELECT FORMAT(1234, '$#,###.00') AS Result;

Ergebnis:

+-----------+
| Result    |
|-----------|
| $1,234.00 |
+-----------+

Eine benutzerdefinierte Formatzeichenfolge ermöglicht es Ihnen, Ihr eigenes benutzerdefiniertes Format zu erstellen. Sie können Zeichenfolgen mit Formatbezeichnern kombinieren, um Ihr eigenes benutzerdefiniertes Format zu erstellen.

In diesem Beispiel verwende ich den # Formatbezeichner, der ein Platzhalter für eine Ziffer ist. Wenn keine Ziffer vorhanden ist, erscheint keine Ziffer in der resultierenden Zeichenfolge.

Ich verwende auch den 0 Formatbezeichner, der auch ein Platzhalter für eine beliebige Ziffer ist. Wenn in diesem Fall jedoch keine Ziffer vorhanden ist, wird stattdessen eine Null verwendet.

Ich füge auch das $ hinzu , , , und . Literale Zeichenfolgen in der Formatzeichenfolge. Diese werden genau so in die Ausgabe aufgenommen, wie sie sind.

Wenn wir die Eingabezahl reduzieren, können wir sehen, wie sich das Ergebnis zwischen 0 unterscheidet und # Formatbezeichner und wie sie mit C verglichen werden Standardformatbezeichner aus dem vorherigen Beispiel:

SELECT 
  FORMAT(34, 'C') AS 'C',
  FORMAT(34, '$0,000.00') AS '0',
  FORMAT(34, '$#,###.00') AS '#';

Ergebnis:

+--------+-----------+--------+
| C      | 0         | #      |
|--------+-----------+--------|
| $34.00 | $0,034.00 | $34.00 |
+--------+-----------+--------+

Wie Sie sich vorstellen können, bieten benutzerdefinierte Formatzeichenfolgen viel mehr Flexibilität als Standardformatzeichenfolgen.

Es gibt jedoch viele Szenarien, in denen Zeichenfolgen im Standardformat leistungsfähiger sein können, insbesondere wenn es darum geht, dynamische Ergebnisse zu erzeugen, die die Kultur berücksichtigen. Bald mehr über Kultur.

Beispiel 3 – Formatieren von Datum und Uhrzeit

Datums-/Uhrzeitwerte bieten auch die Auswahl zwischen standardmäßigen oder benutzerdefinierten Formatzeichenfolgen. Hier ist ein Beispiel für einen Datums-/Uhrzeitwert, der mit einer Standardformatzeichenfolge sowie einigen benutzerdefinierten Formatzeichenfolgen formatiert wird.

DECLARE @date datetime2(7);
SET @date = '2080-05-01 23:09:08.1234567';
SELECT 
  FORMAT(@date, 'd') AS 'd',
  FORMAT(@date, 'M/d/yyyy') AS 'M/d/yyyy',
  FORMAT(@date, 'dd/MM/yy') AS 'dd/MM/yy',
  FORMAT(@date, 'ddd, MMM dd, yy') AS 'ddd, MMM dd, yy',
  FORMAT(@date, 'dddd, dd MMMM yyyy') AS 'dddd, dd MMMM yyyy';

Ergebnis:

+----------+------------+------------+-------------------+------------------------+
| d        | M/d/yyyy   | dd/MM/yy   | ddd, MMM dd, yy   | dddd, dd MMMM yyyy     |
|----------+------------+------------+-------------------+------------------------|
| 5/1/2080 | 5/1/2080   | 01/05/80   | Wed, May 01, 80   | Wednesday, 01 May 2080 |
+----------+------------+------------+-------------------+------------------------+

Der erste verwendet eine Standard-Formatzeichenfolge und die anderen vier verwenden benutzerdefinierte Formatzeichenfolgen.

Eine vollständige Liste der verfügbaren Formatzeichenfolgen für Datum und Uhrzeit finden Sie unter:

  • Liste der Standardzeichenfolgen für das Datum/Uhrzeit-Format
  • Liste der benutzerdefinierten Formatzeichenfolgen für Datum/Uhrzeit

Beispiel 4 – Kultur

Die Ergebnisse von Formatzeichenfolgen können manchmal von der verwendeten Kultur abhängen. Beispielsweise wird in den USA ein kurzes Datumsformat als „M/d/yyyy“ dargestellt, aber in Großbritannien wird es als „dd/MM/yyyy“ dargestellt.

Standardmäßig wird die Sprache der aktuellen Sitzung verwendet, um die Kultur zu definieren. Allerdings ist das FORMAT() Mit der Funktion können Sie dies überschreiben.

Die Syntax der Funktion lautet wie folgt:

FORMAT ( value, format [, culture ] )

Sie können also eine Kultur als optionales Argument angeben.

Hier ist ein Beispiel dafür, wo verschiedene Kulturen dazu führen können, dass eine einzige Formatzeichenfolge eine Reihe verschiedener Formate erzeugt.

DECLARE @date datetime2(7);
SET @date = '2080-05-01 23:09:08.1234567';
SELECT 
  FORMAT(@date, 'd', 'en-us') AS 'US English',
  FORMAT(@date, 'd', 'en-gb') AS 'British',
  FORMAT(@date, 'd', 'de-de') AS 'German',
  FORMAT(@date, 'd', 'jp-jp') AS 'Japanese';

Ergebnis:

+--------------+------------+------------+------------+
| US English   | British    | German     | Japanese   |
|--------------+------------+------------+------------|
| 5/1/2080     | 01/05/2080 | 01.05.2080 | 05/01/2080 |
+--------------+------------+------------+------------+

In diesem Fall verwenden alle vier Länder den d Standardformatzeichenfolge für Datum und Uhrzeit. Sie verwenden jedoch alle ein anderes Kulturargument. Dies führt zu einem anderen Ergebnis, das für jede Kultur geeignet ist.

Und es ist nicht nur Standard Formatzeichenfolgen, die von der Kultur beeinflusst werden. Die Kultur kann auch das Ergebnis von benutzerdefiniert beeinflussen Zeichenfolgen formatieren. Hier ist ein Beispiel:

DECLARE @date datetime2(7);
SET @date = '2080-05-01 23:09:08.1234567';
SELECT 
  FORMAT(@date, 'dddd, dd MMMM', 'en-us') AS 'US English',
  FORMAT(@date, 'dddd, dd MMMM', 'de-de') AS 'German',
  FORMAT(@date, 'dddd, dd MMMM', 'vi') AS 'Vietnamese',
  FORMAT(@date, 'dddd, dd MMMM', 'sv') AS 'Swedish';

Ergebnis:

+-------------------+------------------+----------------------+----------------+
| US English        | German           | Vietnamese           | Swedish        |
|-------------------+------------------+----------------------+----------------|
| Wednesday, 01 May | Mittwoch, 01 Mai | Thứ Tư, 01 Tháng Năm | onsdag, 01 maj |
+-------------------+------------------+----------------------+----------------+

Sie haben auch die Möglichkeit, die invariante Kultur (iv ). Die invariante Kultur ist kulturunabhängig. Es ist mit der englischen Sprache verbunden, aber nicht mit einem Land/einer Region. Weitere Informationen und Beispiele finden Sie unter So geben Sie die invariante Kultur an, wenn Sie FORMAT() in SQL Server verwenden.