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

Stringhe di formato numerico personalizzate supportate da FORMAT() in SQL Server

Questo articolo fornisce un riferimento per gli identificatori di formato numerico personalizzati che possono essere utilizzati durante la formattazione dei numeri utilizzando FORMAT() funzione in SQL Server. Esempi inclusi.

Formatta stringa Descrizione/Esempio
0

Segnaposto zero . Sostituisce lo zero con la cifra corrispondente se presente; in caso contrario, nella stringa del risultato viene visualizzato zero.

Esempi :

SELECT 
  FORMAT(12.34, '0') R1,
  FORMAT(012.34, '00') R2,
  FORMAT(12.34, '000') R3,
  FORMAT(012.34, '0000') R4,
  FORMAT(12.54, '00') R5;
+------+------+------+------+------+
| R1   | R2   | R3   | R4   | R5   |
|------+------+------+------+------|
| 12   | 12   | 012  | 0012 | 13   |
+------+------+------+------+------+
#

Segnaposto cifra . Sostituisce il simbolo “#” con la cifra corrispondente se presente; in caso contrario, nella stringa del risultato non viene visualizzata alcuna cifra.

Nessuna cifra appare nella stringa del risultato se la cifra corrispondente nella stringa di input è uno 0 non significativo.

Esempi :

SELECT 
  FORMAT(12.34, '#') R1,
  FORMAT(012.34, '##') R2,
  FORMAT(12.34, '###') R3,
  FORMAT(012.34, '####') R4,
  FORMAT(12.54, '##') R5;
+------+------+------+------+------+
| R1   | R2   | R3   | R4   | R5   |
|------+------+------+------+------|
| 12   | 12   | 12   | 12   | 13   |
+------+------+------+------+------+
.

Punto decimale . Determina la posizione del separatore decimale nella stringa del risultato.

Esempi :

SELECT 
  FORMAT(12.34, '0.0', 'en-US') R1,
  FORMAT(12.34, '.00', 'en-US') R2,
  FORMAT(12.34, '.', 'en-US') R3,
  FORMAT(12.34, '.00', 'fr-FR') R4;
+------+-------+------+-------+
| R1   | R2    | R3   | R4    |
|------+-------+------+-------|
| 12.3 | 12.34 | 12   | 12,34 |
+------+-------+------+-------+
,

Separatore di gruppo e ridimensionamento dei numeri . Può essere utilizzato sia come separatore di gruppo (noto anche come separatore dei mille) che come identificatore di ridimensionamento numerico.

  • Come separatore di gruppo , inserisce un carattere separatore di gruppo localizzato tra ogni gruppo.
  • Come identificatore di ridimensionamento numerico , divide un numero per 1000 per ogni virgola specificata.

Per specificare un separatore di gruppo, inserire una o più virgole tra i segnaposto di due cifre (0 o #) che formattano le cifre integrali di un numero. Ciò comporta l'inserimento di un carattere separatore di gruppo tra ciascun gruppo di numeri nella parte integrale dell'output.

Per specificare un identificatore di ridimensionamento numerico, inserisci una o più virgole immediatamente a sinistra del punto decimale esplicito o implicito.

Esempi:come separatore di gruppo :

SELECT 
  FORMAT(12345678, '#,#', 'en-US') 'US English',
  FORMAT(12345678, '#,#', 'fr-FR') 'French',
  FORMAT(12345678, '#,#', 'es-ES') 'Spanish';
+--------------+------------+------------+
| US English   | French     | Spanish    |
|--------------+------------+------------|
| 12,345,678   | 12 345 678 | 12.345.678 |
+--------------+------------+------------+

Esempi:come identificatore di ridimensionamento numerico :

SELECT 
  FORMAT(12000, '#,', 'en-US') 'R1',
  FORMAT(1234567890, '#,', 'en-US') R2,
  FORMAT(1234567890, '#,,', 'en-US') R3;
+------+---------+------+
| R1   | R2      | R3   |
|------+---------+------|
| 12   | 1234568 | 1235 |
+------+---------+------+

Esempi:entrambi :

SELECT 
  FORMAT(1234567890, '#,#,', 'en-US') R1,
  FORMAT(1234567890, '#,#,,', 'en-US') R2;
+-----------+-------+
| R1        | R2    |
|-----------+-------|
| 1,234,568 | 1,235 |
+-----------+-------+
%

Segnaposto percentuale . Moltiplica un numero per 100 e inserisce un simbolo di percentuale localizzato nella stringa del risultato.

Esempi :

SELECT 
  FORMAT(0.1234, '#.# %', 'en-US') R1,
  FORMAT(0.1235, '#.#%', 'zh-cn') R2,
  FORMAT(0.125, '#. %', 'en-US') R3,
  FORMAT(0.1234, '%#.00,', 'tr') R4,
  FORMAT(0.1234, '#.#%', 'it') R5;
+--------+-------+------+--------+-------+
| R1     | R2    | R3   | R4     | R5    |
|--------+-------+------+--------+-------|
| 12.3 % | 12.4% | 13 % | %12,34 | 12,3% |
+--------+-------+------+--------+-------+

Segnaposto per mille . Moltiplica un numero per 1000 e inserisce un simbolo per mille localizzato nella stringa del risultato.

Esempi :

SELECT 
  FORMAT(0.01234, '#.# ‰', 'en-US') 'R1',
  FORMAT(0.01235, '#.# ‰', 'en-US') R2,
  FORMAT(0.0125, '#. ‰', 'en-US') R3,
  FORMAT(0.01234, '#.# ‰', 'fr-FR') R4;
+--------+--------+------+--------+
| R1     | R2     | R3   | R4     |
|--------+--------+------+--------|
| 12.3 ‰ | 12.4 ‰ | 13 ‰ | 12,3 ‰ |
+--------+--------+------+--------+

E0
E+0
E-0
e0
e+0
e-0

Notazione esponenziale . Se seguito da almeno uno zero (0 ), formatta il risultato utilizzando la notazione esponenziale. Il caso (E o e ) indica il caso del simbolo dell'esponente nella stringa del risultato. Il numero di zeri che seguono la E o e carattere determina il numero minimo di cifre nell'esponente. Un segno più (+ ) indica che un carattere di segno precede sempre l'esponente. Un segno meno (- ) indica che un carattere di segno precede solo gli esponenti negativi.

Esempi :

SELECT 
  FORMAT(123456789, '0e0') R1,
  FORMAT(123456789, '0e+0') R2,
  FORMAT(123456789, '0E+00') R3,
  FORMAT(1234.56789, '0.0##e+00') R4,
  FORMAT(12.3456789-12, '0e-0') R5;
+------+------+-------+-----------+------+
| R1   | R2   | R3    | R4        | R5   |
|------+------+-------+-----------+------|
| 1e8  | 1e+8 | 1E+08 | 1.235e+03 | 3e-1 |
+------+------+-------+-----------+------+

\

Carattere di escape . Fa interpretare il carattere successivo come un valore letterale anziché come identificatore di formato personalizzato.

Esempio :

SELECT FORMAT(123, '\#0000') Result;
+----------+
| Result   |
|----------|
| #0123    |
+----------+

'string'
"string"

Delimitatore di stringa letterale . Indica che i caratteri inclusi devono essere copiati nella stringa del risultato senza modifiche.

Esempio :

SELECT FORMAT(23, '## Degrees') Result;
+------------+
| Result     |
|------------|
| 23 Degrees |
+------------+

;

Separatore di sezione . Questo è un identificatore di formato condizionale che definisce le sezioni con stringhe di formato separate per numeri positivi, negativi e zero. Ciò consente di applicare una formattazione diversa a un numero a seconda che il suo valore sia positivo, negativo o zero. Una stringa di formato personalizzata può contenere fino a tre sezioni separate da punto e virgola.

  • Una sezione :La stringa di formato si applica a tutti i valori (proprio come negli esempi precedenti).
  • Due sezioni :la prima sezione si applica a valori positivi e zeri e la seconda sezione si applica a valori negativi.

    Se il numero da formattare è negativo, ma diventa zero dopo l'arrotondamento secondo il formato della seconda sezione, lo zero risultante viene formattato secondo la prima sezione.

  • Tre sezioni :la prima sezione si applica ai valori positivi, la seconda sezione si applica ai valori negativi e la terza sezione si applica agli zeri.

    La seconda sezione può essere lasciata vuota (non avendo nulla tra i punti e virgola), nel qual caso la prima sezione si applica a tutti i valori diversi da zero.

    Se il numero da formattare è diverso da zero, ma diventa zero dopo l'arrotondamento in base al formato nella prima o nella seconda sezione, lo zero risultante viene formattato in base alla terza sezione.

Si noti che i valori negativi vengono sempre visualizzati senza un segno meno quando si utilizzano i separatori di sezione. Se desideri che il valore formattato finale abbia un segno meno, dovrai includere esplicitamente il segno meno come parte della stringa di formato personalizzata. Questo vale anche per qualsiasi altra formattazione preesistente associata a un numero.

Esempio:una sezione (senza separatori di sezione)
Questa è una tipica stringa di formato composta da una sezione (proprio come negli esempi precedenti). Pertanto, non vengono utilizzati separatori di separazione.

SELECT 
  FORMAT(123, '0 (Number)') Positive,
  FORMAT(-123, '0 (Number)') Negative,
  FORMAT(0, '0 (Number)') Zero;
+--------------+---------------+------------+
| Positive     | Negative      | Zero       |
|--------------+---------------+------------|
| 123 (Number) | -123 (Number) | 0 (Number) |
+--------------+---------------+------------+

Nota che il segno meno rimane intatto, perché non ho usato separatori di sezione.

Esempi:due sezioni :

/* EXAMPLE 1 - Same format string, different values */
SELECT 
  FORMAT(123,  '0 (Positive or Zero); 0 (Negative)') Positive,
  FORMAT(-123, '0 (Positive or Zero); 0 (Negative)') Negative,
  FORMAT(0,    '0 (Positive or Zero); 0 (Negative)') Zero;
+------------------------+-----------------+----------------------+
| Positive               | Negative        | Zero                 |
|------------------------+-----------------+----------------------|
| 123 (Positive or Zero) |  123 (Negative) | 0 (Positive or Zero) |
+------------------------+-----------------+----------------------+

/* EXAMPLE 2 - Rounding. 
Negative values rounded to zero get 
formatted under the first format string. 
*/
SELECT 
  FORMAT(0.1,  '0 (Positive or Zero); 0 (Negative)') Positive,
  FORMAT(-0.1, '0 (Positive or Zero); 0 (Negative)') Negative;
+----------------------+----------------------+
| Positive             | Negative             |
|----------------------+----------------------|
| 0 (Positive or Zero) | 0 (Positive or Zero) |
+----------------------+----------------------+

Esempi:tre sezioni :

/* EXAMPLE 1 - Basic Usage */
SELECT FORMAT(123, '0 (Positive); 0 (Negative); 0 (Zero)') Result;
+----------------+
| Result         |
|----------------|
| 123 (Positive) |
+----------------+

/* EXAMPLE 2 - Same format string, different values */
SELECT 
  FORMAT(123,   '0 (Positive); 0 (Negative); 0 (Zero)') 'Positive',
  FORMAT(-123,  '0 (Positive); 0 (Negative); 0 (Zero)') 'Negative',
  FORMAT(0,     '0 (Positive); 0 (Negative); 0 (Zero)') 'Zero',
  FORMAT(0.123, '0 (Positive); 0 (Negative); 0 (Zero)') 'Rounded to Zero';

+----------------+----------------+-----------+-------------------+
| Positive       | Negative       | Zero      | Rounded to Zero   |
|----------------+----------------+-----------+-------------------|
| 123 (Positive) | 123 (Negative) |  0 (Zero) |  0 (Zero)         |
+----------------+----------------+-----------+-------------------+

/* EXAMPLE 3 - Second format string is empty */
SELECT 
  FORMAT(123,   '0 (Positive);; 0 (Zero)') 'Positive',
  FORMAT(-123,  '0 (Positive);; 0 (Zero)') 'Negative',
  FORMAT(0,     '0 (Positive);; 0 (Zero)') 'Zero',
  FORMAT(0.123, '0 (Positive);; 0 (Zero)') 'Rounded to Zero';
+----------------+-----------------+-----------+-------------------+
| Positive       | Negative        | Zero      | Rounded to Zero   |
|----------------+-----------------+-----------+-------------------|
| 123 (Positive) | -123 (Positive) |  0 (Zero) |  0 (Zero)         |
+----------------+-----------------+-----------+-------------------+
Altro

Tutti gli altri caratteri. Il carattere viene copiato nella stringa del risultato invariato.

Esempio :

SELECT FORMAT(12, '# °C') Result;
+----------+
| Result   |
|----------|
| 12 °C    |
+----------+

L'elenco sopra è un elenco completo di stringhe di formato personalizzato .NET valide, basato sulle informazioni della documentazione ufficiale .NET per le stringhe di formato personalizzate sul sito Web Microsoft al momento della scrittura.

Il motivo per cui sono rilevanti per SQL Server FORMAT() funzione è che accetta solo stringhe di formato .NET Framework valide.

Oltre a quanto sopra personalizzato format string, puoi anche usare standard stringhe di formato. Ecco un elenco completo di stringhe di formato numerico standard che puoi utilizzare con SQL Server.

Puoi anche formattare i valori di data e ora. Consulta l'elenco delle stringhe di formato di data e ora standard e le stringhe di formato di data e ora personalizzate che puoi utilizzare con FORMAT() funzione.

Se stai ancora cercando di capire cos'è una stringa di formato, vedi Che cos'è una stringa di formato in SQL Server? per una comprensione di base delle stringhe di formato e di come si riferiscono a FORMAT() funzione.