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

Come formattare i numeri in SQL Server

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