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

So geben Sie die invariante Kultur an, wenn Sie FORMAT() in SQL Server verwenden

In SQL Server können Sie das FORMAT() verwenden Funktion zum Formatieren von Datums-/Uhrzeit- und Zahlenwerten als Zeichenfolgen. Insbesondere stellt die Funktion eine Formatierung bereit, die „locale-aware“ ist, und die Funktion akzeptiert ein „culture“-Argument, mit dem Sie eine Kultur oder Sprache angeben können, die für das tatsächliche Format verwendet werden soll. Beispielsweise können Sie en-us übergeben um sicherzustellen, dass die Ergebnisse im US-englischen Format formatiert sind.

Das Kulturargument ist optional. Wenn Sie es also nicht angeben, wird die Ausgabe von der Sprache der aktuellen Sitzung bestimmt.

Das FORMAT() Die Funktion akzeptiert jede Kultur, die von .NET Framework unterstützt wird, als Argument (Sie sind nicht auf die Sprachen beschränkt, die explizit von SQL Server unterstützt werden).

Eine der von .NET Framework unterstützten Kulturen ist die invariante Kultur. Die invariante Kultur ist kulturunabhängig. Genauer gesagt ist diese Kultur mit der englischen Sprache verbunden, aber nicht mit irgendeinem Land/einer Region.

Um dieses FORMAT() anzugeben Sollen die Ergebnisse mit der invarianten Kultur ausgegeben werden, verwenden Sie einfach "iv" für das Kulturargument (das dritte Argument).

Beispiel 1 – Währung

Hier ist ein Beispiel für die Formatierung eines Werts als Währung mithilfe der invarianten Kultur.

SELECT FORMAT(123, 'C', 'iv') Result;

Ergebnisse:

+----------+
| Result   |
|----------|
| ¤123.00  |
+----------+

Dies führt dazu, dass die Ausgabe einen Bruchteil mit einer Dezimalstelle hat. Ihm ist auch das Währungszeichen (¤) vorangestellt, das verwendet wird, um eine nicht spezifizierte Währung zu bezeichnen (dies ist das Unicode-Zeichen U+00A4).

Beispiel 2 – Datum

Hier ist ein Beispiel für die Formatierung eines Datums mit der unveränderlichen Kultur zusammen mit einem kurzen Datumsformat.

DECLARE @date date = '2030-05-25';
SELECT FORMAT(@date, 'd', 'iv') Result;

Ergebnisse:

+------------+
| Result     |
|------------|
| 05/25/2030 |
+------------+

Das kurze Datumsformat für die invariante Kultur ist MM/tt/jjjj.

Hier ist es wieder, aber dieses Mal vergleiche ich es mit der US-englischen, britischen und deutschen (Deutsch) Kultur.

DECLARE @date date = '2030-05-25';
SELECT 
  FORMAT(@date, 'd', 'iv') 'Invariant Culture',
  FORMAT(@date, 'd', 'en-us') 'US English',
  FORMAT(@date, 'd', 'en-gb') 'British',
  FORMAT(@date, 'd', 'de-de') 'German (Deutsch)';

Ergebnisse:

+---------------------+--------------+------------+--------------------+
| Invariant Culture   | US English   | British    | German (Deutsch)   |
|---------------------+--------------+------------+--------------------|
| 05/25/2030          | 5/25/2030    | 25/05/2030 | 25.05.2030         |
+---------------------+--------------+------------+--------------------+

Beispiel 3 – Alle Standardformate für Datum und Uhrzeit

Hier ist eine andere, die die invariante Kultur verwendet, aber dieses Mal formatiere ich ein datetimeoffset -Wert unter Verwendung aller von .NET Framework unterstützten standardmäßigen Formatzeichenfolgen für Datum und Uhrzeit.

DECLARE @date datetimeoffset, @culture char(2); 
SET @date = '2030-05-25 23:59:30.1234567 +07:00';
SET @culture = 'iv';
SELECT 
  FORMAT(@date, 'd', @culture) AS 'd',
  FORMAT(@date, 'D', @culture) AS 'D',
  FORMAT(@date, 'f', @culture) AS 'f',
  FORMAT(@date, 'F', @culture) AS 'F',
  FORMAT(@date, 'g', @culture) AS 'g',
  FORMAT(@date, 'G', @culture) AS 'G',
  FORMAT(@date, 'm', @culture) AS 'm',
  FORMAT(@date, 'M', @culture) AS 'M',
  FORMAT(@date, 'o', @culture) AS 'o',
  FORMAT(@date, 'O', @culture) AS 'O',
  FORMAT(@date, 'r', @culture) AS 'r',
  FORMAT(@date, 'R', @culture) AS 'R',
  FORMAT(@date, 's', @culture) AS 's',
  FORMAT(@date, 't', @culture) AS 't',
  FORMAT(@date, 'T', @culture) AS 'T',
  FORMAT(@date, 'u', @culture) AS 'u',
  FORMAT(@date, 'U', @culture) AS 'U',
  FORMAT(@date, 'y', @culture) AS 'y',
  FORMAT(@date, 'Y', @culture) AS 'Y';

Ergebnis (bei vertikaler Ausgabe):

d | 05/25/2030
D | Saturday, 25 May 2030
f | Saturday, 25 May 2030 23:59
F | Saturday, 25 May 2030 23:59:30
g | 05/25/2030 23:59
G | 05/25/2030 23:59:30
m | May 25
M | May 25
o | 2030-05-25T23:59:30.1234567+07:00
O | 2030-05-25T23:59:30.1234567+07:00
r | Sat, 25 May 2030 16:59:30 GMT
R | Sat, 25 May 2030 16:59:30 GMT
s | 2030-05-25T23:59:30
t | 23:59
T | 23:59:30
u | 2030-05-25 16:59:30Z
U | NULL
y | 2030 May
Y | 2030 May

Die invariante Kultur funktioniert auf Ihrem System nicht?

Wenn Sie die invariante Kultur nicht auf Ihrem System zum Laufen bringen können, könnte dies daran liegen, dass eine ältere Version von .NET Framework installiert ist. Die Dokumentation für .NET Framework 4.8 gibt ausdrücklich an, dass die invariante Kultur mit ihrem aus zwei Buchstaben bestehenden ISO 639-1-Code "iv" verfügbar ist .

Auf diese Stack Overflow-Frage deutet die Antwort von Solomon Rutzky jedoch darauf hin, dass dies möglicherweise nur von .NET 4.5 verfügbar war.

Wenn Sie es mit einer früheren Version von .NET nicht zum Laufen bringen können, versuchen Sie ein Upgrade auf die neueste Version (oder eine Version von mindestens 4.5).