In SQL Server è possibile utilizzare T-SQL FORMAT()
funzione per restituire valori come numeri e date come stringhe formattate.
Fornisci il valore da formattare e specifichi il formato da utilizzare. La funzione accetta un argomento facoltativo che consente di specificare le impostazioni cultura da utilizzare durante la formattazione del valore.
Sintassi
La sintassi è questa:
FORMAT ( value, format [, culture ] )
Dove value
è il valore che vuoi formattare e format
è una stringa di formato valida che specifica il formato desiderato.
La culture
facoltativa argomento può essere usato per specificare una cultura. Se omesso, viene utilizzata la lingua della sessione corrente.
Il FORMAT
la funzione 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 è un identificatore di formato numerico standard per l'output del valore come numero. Questo particolare identificatore di formato comporta la formattazione dell'output con cifre integrali e decimali, separatori di gruppo e un separatore decimale con segno negativo opzionale. Questo identificatore di formato non fa distinzione tra maiuscole e minuscole, quindi N
o n
va bene.
Esempio 2:formattazione in una valuta
Ecco un esempio di formattazione di un numero come valuta:
SELECT FORMAT(1, 'C') AS Result;
Risultato:
+----------+ | Result | |----------| | $1.00 | +----------+
Più formati numerici
Ci sono molte altre stringhe di formato che possono essere utilizzate con FORMAT()
funzione. Ad esempio, esistono stringhe di formato per percentuali, virgola fissa, esponenziale (scientifica), esadecimale e altro.
Le stringhe di formato numerico sono separate in standard e personalizzate.
I due articoli seguenti elencano tutte le stringhe di formato numerico, inclusi 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:formattazione di 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 lunga.
Più formati di data
Esistono molte altre stringhe di formato che possono essere utilizzate per la formattazione delle date. Come per le stringhe di formato numerico, le stringhe di formato di data e ora sono separate in standard e personalizzate, quindi puoi creare i tuoi formati personalizzati oppure puoi fare affidamento su uno standard.
I due articoli seguenti elencano tutte le stringhe di formato di data e ora, inclusi gli esempi:
- Stringhe di formato di data e ora standard
- Stringhe di formato di data e ora personalizzate
Vedi anche Come formattare la data e l'ora in SQL Server per altri esempi.
Esempio 4 – La culture
opzionale Argomento
Ecco un esempio di utilizzo della culture
argomento 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 | +----------+------------+---------+
Il FORMAT()
la funzione accetta qualsiasi cultura supportata da .NET Framework come argomento; non è limitato ai linguaggi esplicitamente supportati da SQL Server.
Se non fornisci questo argomento, viene utilizzata la lingua della sessione corrente.
Per ulteriori esempi, vedi Come le impostazioni della lingua possono influenzare il tuo FORMAT()
Risultati.
Esempio 5:culture
non valida Argomento
Se fornisci una cultura non valida, riceverai 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 formato non valido
Tuttavia, per altri errori, la funzione restituisce NULL
. Ad 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 è stato NULL
.
Tipi di dati validi
FORMAT()
si basa sulla presenza di .NET Framework Common Language Runtime (CLR) e utilizza le regole di formattazione CLR.
I seguenti tipi di dati possono essere formattati con FORMAT()
funzione. Questo elenco contiene i tipi di dati accettabili per la stringa di input insieme ai relativi tipi equivalenti di mapping di .NET Framework.
Categoria | Tipo | tipo .NET |
---|---|---|
Numero | bigint | Int64 |
Numero | int | Int32 |
Numero | piccolo | Int16 |
Numero | tinyint | Byte |
Numero | decimale | SqlDecimale |
Numero | numerico | SqlDecimale |
Numero | galleggiante | Doppio |
Numero | reale | Singolo |
Numero | piccoli soldi | Decimale |
Numero | soldi | Decimale |
Data e ora | data | DataOra |
Data e ora | ora | Intervallo di tempo |
Data e ora | dataora | DataOra |
Data e ora | smalldatetime | DataOra |
Data e ora | dataora2 | DataOra |
Data e ora | datatimeoffset | DateTimeOffset |
Escape di due punti e punti per il tipo di dati "ora"
Quando si utilizza FORMAT
, due punti e punti devono essere evitati (questo aderisce alle regole di formattazione CLR). Pertanto, quando la stringa di formato (secondo parametro) contiene i due punti o un punto, i due punti o il punto devono essere sottoposti a escape con una barra rovesciata quando un valore di input (primo parametro) è del tempo tipo di dati.
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 caratteri di escape restituisce NULL
.
Come accennato, questo vale solo per il tempo tipo di dati. Se modifichiamo il valore di input in un tipo di dati diverso, non è necessario eseguirne 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 sfuggirgli.
Puoi anche usare la barra rovesciata per sfuggire a qualsiasi altro carattere che desideri includere nella stringa del risultato, che altrimenti verrebbe interpretato come identificatore di formato. Far precedere un carattere da una barra rovesciata significa che il carattere seguente è un carattere letterale che dovrebbe essere incluso nella stringa del risultato invariato.
In una stringa di formato data e ora personalizzata, il d
, f
, F
, g
, h
, H
, K
, m
, M
, s
, t
, y
, z
, :
o /
i caratteri vengono interpretati come identificatori di formato personalizzati anziché come caratteri letterali.
In una stringa di formato numerico personalizzata, il #
, 0
, .
, ,
, %
e ‰
i simboli vengono interpretati come identificatori di formato anziché come caratteri letterali. La E
maiuscola e minuscola così come il +
e -
i simboli possono anche essere interpretati come identificatori di formato, a seconda della loro posizione all'interno della stringa di formato.
Se devi includere una barra rovesciata nella stringa del risultato, esegui l'escape con un'altra barra rovesciata.
Remote
Il FORMAT()
funzione non può essere remotata in quanto dipende dalla presenza del CLR. Remotare una funzione che richiede il CLR, potrebbe causare un errore sul server remoto.
Quando utilizzare il FORMAT()
Funzione
Microsoft consiglia che il FORMAT()
viene utilizzata per la formattazione in base alle impostazioni locali di data/ora e valori numerici come stringhe e per conversioni generali del tipo di dati, sia il CAST()
o la funzione CONVERT()
dovrebbe essere utilizzata invece la funzione.