Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come specificare le impostazioni cultura invarianti quando si usa FORMAT() in SQL Server

In SQL Server puoi utilizzare FORMAT() funzione per formattare i valori di data/ora e numeri come stringhe. In particolare, la funzione fornisce una formattazione "locale" e la funzione accetta un argomento "cultura", che consente di specificare una cultura o una lingua da utilizzare per il formato effettivo. Ad esempio, puoi passare en-us per garantire che i risultati siano formattati nel formato inglese americano.

L'argomento culture è facoltativo, quindi se non lo fornisci, l'output sarà determinato dalla lingua della sessione corrente.

Il FORMAT() La funzione accetta qualsiasi cultura supportata da .NET Framework come argomento (non sei limitato ai linguaggi esplicitamente supportati da SQL Server).

Una delle culture supportate da .NET Framework è la cultura invariante. La cultura invariante è insensibile alla cultura. Più specificamente, questa cultura è associata alla lingua inglese ma non a nessun paese/regione.

Per specificare quel FORMAT() dovrebbe produrre i risultati usando le impostazioni cultura invarianti, usa semplicemente "iv" per l'argomento cultura (il terzo argomento).

Esempio 1 – Valuta

Ecco un esempio di formattazione di un valore come valuta utilizzando le impostazioni cultura invarianti.

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

Risultati:

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

Ciò si traduce nell'output che ha una parte frazionaria con una cifra decimale. È anche preceduto dal segno di valuta (¤), che viene utilizzato per denotare una valuta non specificata (questo è il carattere Unicode U+00A4).

Esempio 2 – Data

Ecco un esempio di formattazione di una data utilizzando le impostazioni cultura invarianti insieme a un formato di data breve.

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

Risultati:

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

Il formato della data breve per le impostazioni cultura invarianti è MM/gg/aaaa.

Eccolo di nuovo, ma questa volta lo confronto con la cultura inglese americana, britannica e tedesca (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)';

Risultati:

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

Esempio 3:tutti i formati di data e ora standard

Eccone un altro che utilizza la cultura invariante, ma questa volta formatto un datetimeoffset valore utilizzando tutte le stringhe di formato di data e ora standard supportate da .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';

Risultato (usando l'output verticale):

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

La cultura invariante non funziona sul tuo sistema?

Se non riesci a far funzionare le impostazioni cultura invarianti sul tuo sistema, potrebbe essere dovuto all'installazione di una versione precedente di .NET Framework. La documentazione per .NET Framework 4.8 afferma esplicitamente che le impostazioni cultura invarianti sono disponibili utilizzando il codice ISO 639-1 a due lettere "iv" .

Tuttavia, su questa domanda di Stack Overflow, la risposta di Solomon Rutzky suggerisce che questo potrebbe essere disponibile solo da .NET 4.5.

Se non riesci a farlo funzionare utilizzando una versione precedente di .NET, prova a eseguire l'aggiornamento all'ultima versione (o a una versione almeno dalla 4.5).