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

Come formattare i numeri con le virgole in SQL Server

SQL Server ci fornisce un modo semplice e veloce per formattare i numeri con le virgole inserite nel punto pertinente. Ad esempio, 1234,56 può diventare 1.234,56 . Oppure può diventare 1.234,56 , se è la lingua che stai utilizzando.

Esempio

Possiamo usare il FORMAT() funzione per formattare i numeri con le virgole. Quando utilizziamo questa funzione, passiamo il numero e una stringa di formato. La stringa di formato determina come verrà formattato il numero una volta restituito.

Il FORMAT() La funzione restituisce una rappresentazione di stringa formattata del numero, in base ai valori forniti.

Ecco un esempio da dimostrare:

SELECT 
    FORMAT(123456.789, 'N') AS "Number",
    FORMAT(123456.789, 'P') AS "Percent",
    FORMAT(123456.789, 'C') AS "Currency";

Risultato:

+------------+----------------+-------------+
| Number     | Percent        | Currency    |
|------------+----------------+-------------|
| 123,456.79 | 12,345,678.90% | $123,456.79 |
+------------+----------------+-------------+

Questo esempio mostra tre delle stringhe di formato numerico standard:

  • Se vogliamo solo il numero formattato, possiamo usare N
  • Se vogliamo che sia formattato in percentuale, possiamo usare P
  • Per la valuta, possiamo utilizzare C .

SQL Server è abbastanza intelligente da conoscere le impostazioni locali correnti (in base alla lingua della sessione corrente) e formatta il risultato in base alle convenzioni di tale locale. Questo è importante, perché non tutti vivono in un paese che usa una virgola come separatore delle migliaia e un punto come separatore decimale.

Inoltre, il FORMAT() La funzione accetta un terzo argomento facoltativo "culture", che consente di specificare in modo esplicito la locale.

Ecco un esempio di cosa intendo:

SELECT 
    FORMAT(123456.789, 'N', 'de-de') AS "Number",
    FORMAT(123456.789, 'P', 'de-de') AS "Percent",
    FORMAT(123456.789, 'C', 'de-de') AS "Currency";

Risultato:

+------------+-----------------+--------------+
| Number     | Percent         | Currency     |
|------------+-----------------+--------------|
| 123.456,79 | 12.345.678,90 % | 123.456,79 € |
+------------+-----------------+--------------+

In questo caso specifico de-de come la cultura, il che significa che i risultati saranno formattati secondo le convenzioni tedesche. Possiamo vedere che i punti vengono utilizzati come separatore di gruppo e una virgola viene utilizzata per il separatore decimale.

Se il terzo argomento viene omesso, viene utilizzata la lingua della sessione corrente.

Stringhe di formato personalizzate

È anche possibile utilizzare identificatori di formato personalizzati per creare stringhe di formato personalizzate. Ad esempio, il # il carattere è un segnaposto numerico, il 0 è un segnaposto zero, la virgola (, ) è un segnaposto per il separatore di gruppo e il punto (. ) è un segnaposto per il separatore decimale .

Ciò è vero indipendentemente dalle impostazioni internazionali utilizzate:SQL Server calcola quali caratteri utilizzare per il gruppo e i separatori decimali in base alle impostazioni internazionali correnti.

Esempio:

SELECT 
    FORMAT(123456.789, '###,###,###.##', 'en-us') AS "US English",
    FORMAT(123456.789, '###,###,###.##', 'de-de') AS "German";

Risultato:

+--------------+------------+
| US English   | German     |
|--------------+------------|
| 123,456.79   | 123.456,79 |
+--------------+------------+

In entrambi i casi, ho utilizzato la stessa stringa di formato, ma SQL Server ha restituito i separatori di gruppo e decimali applicabili alle impostazioni internazionali specificate (che è stata specificata con il terzo argomento "culture").

Nell'esempio precedente, la stringa di formato include più cifre del numero effettivo. Indipendentemente da ciò, SQL Server ha scelto di non restituire zeri iniziali. Questo perché abbiamo usato il # identificatore di formato.

Se vogliamo che SQL Server restituisca zeri iniziali, possiamo utilizzare 0 identificatore di formato:

SELECT 
    FORMAT(123456.789, '000,000,000.00', 'en-us') AS "US English",
    FORMAT(123456.789, '000,000,000.00', 'de-de') AS "German";

Risultato:

+----------------+----------------+
| US English     | German         |
|----------------+----------------|
| 000,123,456.79 | 000.123.456,79 |
+----------------+----------------+