Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak określić niezmienną kulturę podczas korzystania z FORMAT() w SQL Server

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).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Parallel Backup Restore -1

  2. Dowiedz się, czy obiekt jest funkcją wartościującą tabelę w SQL Server za pomocą OBJECTPROPERTY()

  3. Jak korzystać z funkcji AlwaysOn programu SQL Server

  4. Pobierz wiersz, w którym kolumna datetime =dzisiaj - serwer SQL noob

  5. Jak usunąć duże dane tabeli w SQL bez logowania?