In SQL Server, il FORMAT()
La funzione consente di formattare i valori di data/ora e numeri come una stringa formattata passando una "stringa di formato" come secondo argomento (il primo argomento è il valore che viene formattato).
Ecco un esempio di questa funzione in azione:
FORMAT(@date, 'dd/MM/yyyy');
In questo caso la stringa di formato è gg/MM/aaaa .
Questa particolare stringa di formato specifica che @date
il valore deve essere formattato con un giorno a due cifre, un mese a due cifre e un anno a quattro cifre, in quest'ordine, e con barre in avanti come separatori.
Ciò risulterebbe in qualcosa del genere:
21/05/2019
Una stringa di formato è una stringa che contiene uno o più identificatori di formato predefiniti , che sono singoli caratteri o gruppi di caratteri che definiscono come formattare l'output.
SQL Server accetta solo stringhe di formato supportate da .NET Framework.
Una stringa di formato può essere una stringa di formato standard o una stringa di formato personalizzata. Ecco come funzionano:
- Una stringa di formato standard è una stringa di formato predefinita. Contiene un unico identificatore di formato che viene interpretato come rappresentante di un determinato formato predefinito. Le stringhe di formato standard sono in realtà alias per le stringhe di formato personalizzate. Tuttavia, la stringa di formato personalizzata effettiva utilizzata dipende spesso dalle impostazioni cultura.
- Una stringa di formato personalizzata d'altra parte, è costituito da uno o più identificatori di formato personalizzati che, in combinazione tra loro, definiranno il formato. Ciò ti consente molta più flessibilità nel definire come dovrebbe apparire l'output.
Esempio 1 – Stringa di formato standard
Ecco un esempio per dimostrare come funzionano le stringhe di formato standard.
SELECT FORMAT(1234, 'C') AS Result;
Risultato:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
In questo esempio, C
è la stringa di formato. In questo caso, è una stringa di formato numerico standard costituita da un unico identificatore di formato. Questo particolare identificatore di formato viene utilizzato per rappresentare un importo in valuta.
Potremmo anche ottenere lo stesso risultato utilizzando una stringa di formato numerico personalizzata.
Esempio 2:stringa di formato personalizzata
Questo esempio produce lo stesso output dell'esempio precedente. La differenza è che, in questo esempio, utilizzo un custom format string invece di uno standard.
SELECT FORMAT(1234, '$#,###.00') AS Result;
Risultato:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
Una stringa di formato personalizzata ti consente di creare il tuo formato personalizzato. Puoi combinare stringhe con identificatori di formato per creare il tuo formato personalizzato.
In questo esempio, utilizzo il #
identificatore di formato, che è un segnaposto per una cifra. Se una cifra non è presente, nella stringa risultante non viene visualizzata alcuna cifra.
Uso anche il 0
identificatore di formato, che è anche un segnaposto per qualsiasi cifra. Ma in questo caso, se non è presente una cifra, viene utilizzato uno zero.
Includo anche il $
, ,
e .
stringhe letterali nella stringa di formato. Questi sono inclusi nell'output esattamente come sono.
Se riduciamo il numero di input, possiamo vedere come il risultato è diverso tra 0
e #
specificatori di formato e come si confrontano con il C
identificatore di formato standard dall'esempio precedente:
SELECT FORMAT(34, 'C') AS 'C', FORMAT(34, '$0,000.00') AS '0', FORMAT(34, '$#,###.00') AS '#';
Risultato:
+--------+-----------+--------+ | C | 0 | # | |--------+-----------+--------| | $34.00 | $0,034.00 | $34.00 | +--------+-----------+--------+
Come puoi immaginare, le stringhe di formato personalizzate offrono molta più flessibilità rispetto alle stringhe di formato standard.
Tuttavia, esistono molti scenari in cui le stringhe di formato standard possono essere più potenti, soprattutto quando si tratta di produrre risultati dinamici che tengano conto della cultura. Presto altro sulla cultura.
Esempio 3:formattazione di data e ora
I valori di data/ora offrono anche la scelta di stringhe di formato standard o personalizzate. Ecco un esempio di un valore di data/ora formattato con una stringa di formato standard, nonché alcune stringhe di formato personalizzate.
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';
Risultato:
+----------+------------+------------+-------------------+------------------------+ | 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 | +----------+------------+------------+-------------------+------------------------+
Il primo utilizza una stringa di formato standard e gli altri quattro utilizzano stringhe di formato personalizzate.
Per un elenco completo delle stringhe di formato di data e ora disponibili, vedere quanto segue:
- Elenco delle stringhe di formato data/ora standard
- Elenco delle stringhe di formato data/ora personalizzate
Esempio 4 – Cultura
I risultati delle stringhe di formato a volte possono dipendere dalle impostazioni cultura utilizzate. Ad esempio, negli Stati Uniti un formato di data breve è rappresentato come "M/g/aaaa", ma in Gran Bretagna è rappresentato come "gg/MM/aaaa".
Per impostazione predefinita, per definire le impostazioni cultura viene utilizzata la lingua della sessione corrente. Tuttavia, il FORMAT()
la funzione ti consente di ignorarlo.
La sintassi della funzione è la seguente:
FORMAT ( value, format [, culture ] )
Quindi ti consente di specificare una cultura come argomento facoltativo.
Ecco un esempio di dove culture diverse possono dare come risultato una singola stringa di formato che produce una serie di formati diversi.
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';
Risultato:
+--------------+------------+------------+------------+ | US English | British | German | Japanese | |--------------+------------+------------+------------| | 5/1/2080 | 01/05/2080 | 01.05.2080 | 05/01/2080 | +--------------+------------+------------+------------+
In questo caso, tutti e quattro i paesi utilizzano il d
stringa di formato di data e ora standard. Tuttavia, usano tutti un argomento culturale diverso. Questo produce un risultato diverso per adattarsi a ciascuna cultura.
E non è solo standard stringhe di formato influenzate dalle impostazioni cultura. La cultura può anche influenzare il risultato di custom stringhe di formato. Ecco un esempio:
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';
Risultato:
+-------------------+------------------+----------------------+----------------+ | US English | German | Vietnamese | Swedish | |-------------------+------------------+----------------------+----------------| | Wednesday, 01 May | Mittwoch, 01 Mai | Thứ Tư, 01 Tháng Năm | onsdag, 01 maj | +-------------------+------------------+----------------------+----------------+
Hai anche la possibilità di usare le impostazioni cultura invarianti (iv
). La cultura invariante è insensibile alla cultura. È associato alla lingua inglese ma non a nessun paese/regione. Per ulteriori informazioni ed esempi, vedere Come specificare le impostazioni cultura invarianti quando si usa FORMAT() in SQL Server.