W SQL Server możesz użyć FORMAT()
funkcja, aby sformatować datę/godzinę i wartości liczbowe jako ciągi. W szczególności funkcja zapewnia formatowanie „świadome lokalizacji”, a funkcja akceptuje argument „kultura”, co pozwala określić kulturę lub język, który ma być używany w rzeczywistym formacie. Na przykład możesz przekazać en-us
aby upewnić się, że wyniki są sformatowane w amerykańskim angielskim formacie.
Argument kultury jest opcjonalny, więc jeśli go nie podasz, wynik zostanie określony na podstawie języka bieżącej sesji.
FORMAT()
funkcja akceptuje dowolną kulturę obsługiwaną przez .NET Framework jako argument (nie jesteś ograniczony do języków wyraźnie obsługiwanych przez SQL Server).
Jedną z kultur obsługiwanych przez .NET Framework jest kultura niezmienna. Kultura niezmienna jest kulturowo niewrażliwa. Mówiąc dokładniej, ta kultura jest powiązana z językiem angielskim, ale nie z żadnym krajem/regionem.
Aby określić, że FORMAT()
powinien wypisać wyniki przy użyciu kultury niezmiennej, po prostu użyj "iv"
dla argumentu kultury (trzeci argument).
Przykład 1 – Waluta
Oto przykład formatowania wartości jako waluty przy użyciu kultury niezmiennej.
SELECT FORMAT(123, 'C', 'iv') Result;
Wyniki:
+----------+ | Result | |----------| | ¤123.00 | +----------+
Powoduje to, że wyjście ma część ułamkową z miejscem dziesiętnym. Jest również poprzedzony znakiem waluty (¤), który jest używany do oznaczenia nieokreślonej waluty (jest to znak Unicode U+00A4).
Przykład 2 – Data
Oto przykład formatowania daty przy użyciu kultury niezmiennej wraz z krótkim formatem daty.
DECLARE @date date = '2030-05-25'; SELECT FORMAT(@date, 'd', 'iv') Result;
Wyniki:
+------------+ | Result | |------------| | 05/25/2030 | +------------+
Format daty krótkiej dla kultury niezmiennej to MM/dd/rrrr.
Oto znowu, ale tym razem porównuję to z kulturą angielską w USA, brytyjską i niemiecką (Deutsch).
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)';
Wyniki:
+---------------------+--------------+------------+--------------------+ | Invariant Culture | US English | British | German (Deutsch) | |---------------------+--------------+------------+--------------------| | 05/25/2030 | 5/25/2030 | 25/05/2030 | 25.05.2030 | +---------------------+--------------+------------+--------------------+
Przykład 3 – Wszystkie standardowe formaty daty i godziny
Oto kolejny, używający kultury niezmiennej, ale tym razem formatuję przesunięcie daty i godziny wartość przy użyciu wszystkich standardowych ciągów formatu daty i godziny obsługiwanych przez .NET Framework.
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';
Wynik (przy użyciu wyjścia pionowego):
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
Niezmienna kultura nie działa w Twoim systemie?
Jeśli nie możesz sprawić, by niezmienna kultura działała w twoim systemie, może to być spowodowane instalacją starszej wersji .NET Framework. Dokumentacja programu .NET Framework 4,8 wyraźnie stwierdza, że niezmienna kultura jest dostępna przy użyciu dwuliterowego kodu ISO 639-1 "iv"
.
Jednak w przypadku tego pytania o przepełnienie stosu odpowiedź od Solomona Rutzky'ego sugeruje, że może to być dostępne tylko w programie .NET 4.5.
Jeśli nie możesz zmusić go do działania przy użyciu wcześniejszej wersji .NET, spróbuj zaktualizować do najnowszej wersji (lub wersji co najmniej 4.5).