Database.Guide (Italiano)

In SQL Server, si può usare la funzione T-SQL FORMAT() per restituire valori come numeri e date come stringhe formattate.

Si fornisce il valore da formattare e si specifica il formato da usare. La funzione accetta un argomento opzionale che permette di specificare una cultura da usare quando si formatta il valore.

Sintassi

La sintassi è questa:

FORMAT ( value, format )

dove value è il valore da formattare, e format è una stringa di formato valida che specifica il formato desiderato.

L’argomento opzionale culture può essere usato per specificare una cultura. Se omesso, viene usata la lingua della sessione corrente.

La funzione FORMAT non è deterministica.

Esempio 1 – Formattare un numero

Ecco un esempio di formattazione di un numero:

SELECT FORMAT(1, 'N') AS Result;

Risultato:

+----------+| Result ||----------|| 1.00 |+----------+

In questo caso, ho usato N come stringa di formato. Questo è uno specificatore di formato numerico standard per emettere il valore come numero. Questo particolare specificatore di formato fa sì che l’output sia formattato con cifre integrali e decimali, separatori di gruppo e un separatore decimale con segno negativo opzionale. Questo specificatore di formato è case-insensitive, quindi sia N che n vanno bene.

Esempio 2 – Formattare in una valuta

Ecco un esempio di formattazione di un numero come valuta:

SELECT FORMAT(1, 'C') AS Result;

Risultato:

+----------+| Result ||----------|| $1.00 |+----------+

Altri formati numerici

Ci sono molte altre stringhe di formato che possono essere usate con la funzione FORMAT(). Per esempio, ci sono stringhe di formato per le percentuali, a virgola fissa, esponenziale (scientifico), esadecimale, e altro ancora.

Le stringhe di formato numerico sono separate in standard e personalizzate.

I seguenti due articoli elencano tutte le stringhe di formato numerico, compresi gli esempi:

  • Stringhe di formato numerico standard
  • Stringhe di formato numerico personalizzate

Vedi anche Come formattare i numeri in SQL Server per altri esempi di formattazione dei numeri.

Esempio 3 – Formattare una data

Ecco un esempio di formattazione di una data:

SELECT GETDATE() AS 'Unformatted Date', FORMAT( GETDATE(), 'D') AS 'Formatted Date';

Risultato:

+-------------------------+------------------------+| Unformatted Date | Formatted Date ||-------------------------+------------------------|| 2019-05-08 06:16:55.613 | Wednesday, May 8, 2019 |+-------------------------+------------------------+

In questo caso, ho usato D che specifica un modello di data lungo.

Altri formati di data

Ci sono molte altre stringhe di formato che possono essere usate per formattare le date. Come per le stringhe di formato numerico, le stringhe di formato di data e ora sono separate in standard e personalizzate, così puoi costruire i tuoi formati personalizzati, o puoi affidarti a uno standard.

I seguenti due articoli elencano tutte le stringhe di formato di data e ora, compresi gli esempi:

  • Stringhe di formato di data e ora standard
  • Stringhe di formato di data e ora personalizzate

Vedi anche Come formattare la data & ora in SQL Server per altri esempi.

Esempio 4 – L’argomento cultura opzionale

Ecco un esempio di utilizzo dell’argomento culture per restituire un valore in varie valute:

SELECT FORMAT(1, 'C', 'fr-FR') AS 'France', FORMAT(1, 'C', 'th-TH') AS 'Thailand', FORMAT(1, 'C', 'ja-JP') AS 'Japan';

Risultato:

+----------+------------+---------+| France | Thailand | Japan ||----------+------------+---------|| 1,00 € | ฿1.00 | ¥1 |+----------+------------+---------+

La funzione FORMAT() accetta qualsiasi cultura supportata dal .NET Framework come argomento; non è limitata alle lingue esplicitamente supportate da SQL Server.

Se non si fornisce questo argomento, viene utilizzata la lingua della sessione corrente.

Per ulteriori esempi, vedere Come le impostazioni della lingua possono influenzare i risultati FORMAT().

Esempio 5 – Argomento cultura non valida

Se fornisci una cultura non valida, otterrai un errore:

SELECT FORMAT(1, 'C', 'oop-SS!') AS 'Oops!';

Risultato:

The culture parameter 'oop-SS!' provided in the function call is not supported.

Esempio 6 – Valore di formato non valido

Invece, per altri errori, la funzione restituisce NULL. Per esempio, ecco cosa succede se fornisco un valore non valido da formattare:

SELECT FORMAT(GETDATE(), 'C') AS 'Result';

Risultato:

+----------+| Result ||----------|| NULL |+----------+

In questo caso, stavo cercando di formattare una data in una valuta, e quindi il risultato era NULL.

Tipi di dati validi

FORMAT() si basa sulla presenza del .NET Framework Common Language Runtime (CLR), e usa le regole di formattazione del CLR.

I seguenti tipi di dati possono essere formattati con la funzione FORMAT(). Questa lista contiene i tipi di dati accettabili per la stringa di input insieme ai loro tipi equivalenti di mappatura del .NET Framework.

Categoria Tipo .NET
Numerico bigint Int64
Numerico int Int32
Numerico smallint Int16
Numerico tinyint Byte
Numerico decimale SqlDecimal
Numerico numerico SqlDecimal
Numerico float Doppio
Numerico reale Singolo
Numerico Moneta Decimale
Numerico denaro Decimale
Data e ora data DateTime
Data e ora time TimeSpan
Data e Ora datetime DateTime
Data e Ora smalldatetime DateTime
Data e ora datetime2 DateTime
Data e ora datetimeoffset DateTimeOffset

Escaping di punti e virgole per il tipo di dati ‘time’

Quando si usa FORMAT, i due punti e le virgole devono essere separati (questo aderisce alle regole di formattazione del CLR). Pertanto, quando la stringa di formato (secondo parametro) contiene un due punti o un punto, i due punti o il punto devono essere evasi con un backslash quando un valore di input (primo parametro) è di tipo tempo.

Esempio:

SELECT CAST('12:15' AS time) AS 'Unformatted Data', FORMAT(CAST('12:15' AS time), N'hh.mm') AS 'Unescaped', FORMAT(CAST('12:15' AS time), N'hh\.mm') AS 'Escaped';

Risultato:

+--------------------+-------------+-----------+| Unformatted Data | Unescaped | Escaped ||--------------------+-------------+-----------|| 12:15:00 | NULL | 12.15 |+--------------------+-------------+-----------+

Quindi, come previsto, la stringa senza escape restituisce NULL.

Come detto, questo vale solo per il tipo di dati tempo. Se cambiamo il valore di input con un altro tipo di dati, non abbiamo bisogno di fare l’escape:

SELECT CAST('12:15' AS datetime) AS 'Unformatted Data', FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Unescaped', FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Escaped';

Risultato:

+-------------------------+-------------+-----------+| Unformatted Data | Unescaped | Escaped ||-------------------------+-------------+-----------|| 1900-01-01 12:15:00.000 | 12.15 | 12.15 |+-------------------------+-------------+-----------+

In questo caso, il valore di input è datetime, e quindi, il risultato va bene senza fare l’escape.

Si può anche usare il backslash per mettere sotto escape qualsiasi altro carattere che si vuole includere nella stringa del risultato, che altrimenti verrebbe interpretato come uno specificatore di formato. Precedere un carattere con un backslash significa che il carattere seguente è un letterale di carattere che dovrebbe essere incluso nella stringa del risultato senza modifiche.

In una stringa di formato data e ora personalizzata, il dfFghHKmMstyz:, o / sono interpretati come specificatori di formato personalizzati piuttosto che come caratteri letterali.

In una stringa di formato numerico personalizzato, i caratteri #0.,%, e simboli sono interpretati come specificatori di formato piuttosto che come caratteri letterali. Le lettere maiuscole e minuscole E così come i simboli + e - possono anche essere interpretati come specificatori di formato, a seconda della loro posizione nella stringa di formato.

Se avete bisogno di includere un backslash nella stringa del risultato, fate l’escape con un altro backslash.

Remoto

La funzione FORMAT() non può essere remotata poiché dipende dalla presenza del CLR. Rimuovere una funzione che richiede il CLR potrebbe causare un errore sul server remoto.

Quando usare la funzione FORMAT()

Microsoft raccomanda di usare la funzione FORMAT() per la formattazione locale di valori di data/ora e numeri come stringhe, e che per le conversioni generali del tipo di dati, si usi invece la funzione CAST() o la funzione CONVERT().

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *