A partire da SQL Server 2012, puoi formattare i tipi numerici utilizzando il T-SQL FORMAT()
funzione. Questa funzione accetta tre argomenti; il numero, il formato e un argomento "cultura" facoltativo.
Restituisce una stringa formattata di tipo nvarchar .
Il formato viene fornito come stringa di formato. Una stringa di formato definisce come formattare l'output.
Ecco un esempio:
SELECT FORMAT(1, 'N');
Risultato:
1.00
In questo caso, ho usato N
come secondo argomento. Questo è l'identificatore di formato numerico standard per Numero. Questo particolare identificatore di formato (N
) comporta la formattazione dell'output con cifre integrali e decimali, separatori di gruppo e un separatore decimale con segno negativo opzionale. Questo argomento non fa distinzione tra maiuscole e minuscole, quindi N
o n
va bene.
Punti decimali
Ecco un altro esempio, questa volta utilizzando N1
per specificare che vogliamo solo una cifra decimale:
SELECT FORMAT(1, 'N1');
Risultato:
1.0
Ma puoi anche aumentare il numero di cifre decimali:
SELECT FORMAT(1, 'N7');
Risultato:
1.0000000
In questi esempi, il 1
e 7
sono conosciuti come specificatori di precisione .
Gli specificatori di precisione sono opzionali. Possono essere un valore compreso tra 0 e 99, che specifica la precisione del risultato. Il modo in cui funziona dipende dall'identificatore di formato utilizzato. Per alcuni identificatori di formato, specificherà il numero totale di cifre nel risultato, per altri specificherà il numero di cifre decimali. Negli altri casi verrà ignorato del tutto. Consulta l'elenco completo degli identificatori di formato numerico standard per vedere in che modo gli identificatori di precisione influiscono sull'output di ciascun identificatore di formato.
Percentuale
Gli esempi seguenti usano la P
argomento, che formatta il numero come valore percentuale. Moltiplica il numero per 100, quindi aggiunge un segno di percentuale localizzato.
SELECT FORMAT(1, 'P') AS 'Example 1', FORMAT(.375, 'P') AS 'Example 2', FORMAT(.0375, 'P', 'tr-tr') AS 'Example 3';
Risultato:
Example 1 Example 2 Example 3 --------- --------- --------- 100.00 % 37.50 % %3,75
Si noti che "Esempio 3" include un terzo argomento, che specifica le impostazioni cultura da utilizzare nell'output. In questo caso, utilizzo tr-tr
per il turco. Ciò comporta che il segno di percentuale venga anteposto al numero (anziché aggiunto, come gli altri). Inoltre, viene utilizzata una virgola come separatore decimale.
Se non fornisci l'argomento "cultura", viene utilizzata la lingua della sessione corrente.
Come puoi immaginare, potresti ottenere risultati abbastanza diversi a seconda della tua lingua corrente o del valore di qualsiasi argomento di "cultura". Vedi come le impostazioni della lingua possono influire sui risultati di FORMAT() per ulteriori esempi.
Valuta
Puoi usare C
per restituire un valore in valuta.
SELECT FORMAT(1, 'C');
Risultato:
$1.00
Puoi anche aggiungere le impostazioni internazionali come terzo parametro.
Ecco alcuni esempi:
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
Esponenziale (scientifico)
Puoi usare E
per specificare la notazione esponenziale.
SELECT FORMAT(1234.56789, 'E');
Risultato:
1.234568E+003
Esadecimale
Puoi anche formattare un numero come esadecimale. Per farlo, usa la X
argomento:
SELECT FORMAT(10, 'X');
Risultato:
A
L'esadecimale è in base 16. Pertanto, il conteggio va 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F prima di ricominciare (es. 10 in esadecimale è l'equivalente di 16 in decimale e 11 è l'equivalente di 17, ecc.). Ecco perché l'esempio qui risulta in A
, perché in esadecimale, A
viene dopo 9
.
Ecco un altro esempio, questa volta con un numero maggiore:
SELECT FORMAT(7145, 'X');
Risultato:
1BE9
Formato personalizzato
Puoi anche creare il tuo formato personalizzato utilizzando una stringa di formato numerico personalizzata. Consiste in una serie di identificatori di formato numerico personalizzati che forniscono uno schema per il tuo numero.
Questo è più facile spiegato con un esempio:
SELECT FORMAT(123456789, '##-###-####');
Risultato:
12-345-6789
In questo caso, utilizzo il segnaposto delle cifre (#
). Il segnaposto della cifra mi consente di specificare un formato per il numero, utilizzando il #
simbolo come segnaposto per ogni numero.
Virgole
Un altro esempio:
SELECT FORMAT(123456789, '#,#');
Risultato:
123,456,789
Zeri in testa
Un altro identificatore di formato numerico personalizzato è zero (0
). Puoi usarlo per riempire un numero con zeri iniziali:
SELECT FORMAT(7, '000') AS 'Example 1', FORMAT(123, '0000') AS 'Example 2', FORMAT(123, '00000') AS 'Example 3';
Risultato:
Example 1 Example 2 Example 3 --------- --------- --------- 007 0123 00123
Puoi anche usarlo per rimuovere gli zeri:
SELECT FORMAT(0123, '000') AS 'Example 1', FORMAT(0123, '0000') AS 'Example 2', FORMAT(000123, '00000') AS 'Example 3';
Risultato:
Example 1 Example 2 Example 3 --------- --------- --------- 123 0123 00123
Riferimento agli identificatori di formato numerico
Gli articoli seguenti contengono tutti gli identificatori di formato numerico che puoi utilizzare con FORMAT()
funzione, insieme a esempi T-SQL.
- Stringhe di formato numerico standard
- Stringhe di formato numerico personalizzate
Questi sono gli stessi identificatori di formato supportati da .NET Framework (il FORMAT()
la funzione si basa su .NET Framework).
Data e ora
Il FORMAT()
la funzione consente anche di formattare data e ora.
Data e ora hanno un insieme separato di identificatori di formato:
- Stringhe di formato di data e ora standard
- Stringhe di formato di data e ora personalizzate