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

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

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

Alcuni degli esempi utilizzano identificatori di precisione (questi sono costituiti da una o due cifre aggiunte all'identificatore di formato). Gli specificatori di precisione 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.

Formatta stringa Descrizione/Esempio
C o c

Valuta . Converte il numero in una stringa che rappresenta un importo in valuta.

È possibile utilizzare uno specificatore di precisione opzionale per specificare il numero di cifre decimali.

Esempi (usando diverse culture) :

SELECT 
  FORMAT(12.34, 'C', 'en-us') R1,
  FORMAT(012.34, 'C', 'iv') R2,
  FORMAT(12.34, 'C0', 'ja-jp') R3,
  FORMAT(12.54, 'c', 'vi-vn') R4,
  FORMAT(12.54, 'c0', 'en-au') R5,
  FORMAT(12.54, 'c4', 'en-gb') R6;
+--------+--------+------+---------+------+----------+
| R1     | R2     | R3   | R4      | R5   | R6       |
|--------+--------+------+---------+------+----------|
| $12.34 | ¤12.34 | ¥12  | 12,54 ₫ | $13  | £12.5400 |
+--------+--------+------+---------+------+----------+
D o d

Decimale . Converte il numero in una stringa di cifre decimali (0-9), precedute da un segno meno se il numero è negativo. Questo formato è supportato solo per i tipi integrali.

Se viene utilizzato l'identificatore di precisione (opzionale), specifica il numero totale di cifre nel risultato. Se il numero non ha tante cifre, verrà riempito con zeri alla sua sinistra.

Esempi :

SELECT 
  FORMAT(123, 'D') R1,
  FORMAT(123, 'D0') R2,
  FORMAT(123, 'D3') R3,
  FORMAT(123, 'd4') R4,
  FORMAT(0123, 'd5') R5,
  FORMAT(1.23, 'd') R6;
+------+------+------+------+-------+------+
| R1   | R2   | R3   | R4   | R5    | R6   |
|------+------+------+------+-------+------|
| 123  | 123  | 123  | 0123 | 00123 | NULL |
+------+------+------+------+-------+------+
E o e

Esponenziale (scientifico) . Converte il numero in una stringa della forma “-d.ddd…E+ddd” o “-d.ddd…e+ddd”, dove ogni “d” indica una cifra (0-9). La stringa inizia con un segno meno se il numero è negativo. Esattamente una cifra precede sempre il punto decimale.

Se viene utilizzato uno specificatore di precisione, specifica quante cifre si trovano a destra della virgola decimale. Se omesso, a destra del punto decimale appariranno sei cifre.

Esempi :

SELECT 
  FORMAT(1024.1234567, 'E') R1,
  FORMAT(1024.1234567, 'E0') R2,
  FORMAT(1024.1234567, 'E3') R3,
  FORMAT(1024.1234567, 'e4') R4,
  FORMAT(1024.1234567, 'e7') R5;
+---------------+--------+------------+-------------+----------------+
| R1            | R2     | R3         | R4          | R5             |
|---------------+--------+------------+-------------+----------------|
| 1.024123E+003 | 1E+003 | 1.024E+003 | 1.0241e+003 | 1.0241235e+003 |
+---------------+--------+------------+-------------+----------------+
F o f

Punto fisso . Converte il numero in una stringa della forma “-ddd.ddd…” dove ogni “d” indica una cifra (0-9). La stringa inizia con un segno meno se il numero è negativo.

È possibile utilizzare uno specificatore di precisione opzionale per specificare il numero di cifre decimali.

Esempi :

SELECT 
  FORMAT(12.345, 'F', 'en-us') R1,
  FORMAT(12.345, 'F0', 'en-us') R2,
  FORMAT(12.345, 'f3', 'en-us') R3,
  FORMAT(12.345, 'f4', 'en-us') R4,
  FORMAT(12.345, 'f5', 'en-us') R5,
  FORMAT(12.345, 'f', 'vi-vn') R6;
+-------+------+--------+---------+----------+-------+
| R1    | R2   | R3     | R4      | R5       | R6    |
|-------+------+--------+---------+----------+-------|
| 12.35 | 12   | 12.345 | 12.3450 | 12.34500 | 12,35 |
+-------+------+--------+---------+----------+-------+
G o g

Generale . Converte il numero in una notazione a virgola fissa o scientifica più compatta, a seconda del tipo di numero e della presenza di uno specificatore di precisione.

Se viene utilizzato l'identificatore di precisione (facoltativo), definisce il numero massimo di cifre significative che possono essere visualizzate nella stringa del risultato. Se omesso, o se il valore è zero, la precisione è determinata dal tipo di numero.

Consulta la documentazione ufficiale di .NET per una spiegazione di come il tipo di numero può influenzare la precisione. Potrebbe essere necessario fare un riferimento incrociato con la documentazione ufficiale per FORMAT() per vedere come ogni tipo numerico .NET esegue il mapping a un tipo numerico T-SQL.

Esempi :

SELECT 
  FORMAT(12.345, 'G', 'en-us') R1,
  FORMAT(12.345, 'G0', 'en-us') R2,
  FORMAT(12.345, 'g3', 'en-us') R3,
  FORMAT(12.345, 'g4', 'en-us') R4,
  FORMAT(12.345, 'g5', 'en-us') R5,
  FORMAT(12.345, 'g', 'vi-vn') R6;
+--------+--------+------+-------+--------+--------+
| R1     | R2     | R3   | R4    | R5     | R6     |
|--------+--------+------+-------+--------+--------|
| 12.345 | 12.345 | 12.3 | 12.35 | 12.345 | 12,345 |
+--------+--------+------+-------+--------+--------+
N o n

Numero . Converte il numero in una stringa del formato “-d,ddd,ddd.ddd…”.

Se viene utilizzato l'identificatore di precisione (opzionale), definisce il numero di cifre a destra della virgola decimale.

Esempi :

SELECT 
  FORMAT(1234.56, 'N', 'en-us') R1,
  FORMAT(1234.56, 'N0', 'en-us') R2,
  FORMAT(1234.56, 'n3', 'en-us') R3,
  FORMAT(1234.56, 'n4', 'en-us') R4,
  FORMAT(1234.56, 'n', 'vi-vn') R5;
+----------+-------+-----------+------------+----------+
| R1       | R2    | R3        | R4         | R5       |
|----------+-------+-----------+------------+----------|
| 1,234.56 | 1,235 | 1,234.560 | 1,234.5600 | 1.234,56 |
+----------+-------+-----------+------------+----------+
P o p

Percentuale . Moltiplica il numero per 100 e lo converte in una stringa che rappresenta una percentuale.

Se viene utilizzato l'identificatore di precisione, definisce il numero di cifre decimali.

Esempi :

SELECT 
  FORMAT(.1234, 'P', 'en-us') R1,
  FORMAT(.1234, 'P0', 'en-us') R2,
  FORMAT(.1250, 'p0', 'en-us') R3,
  FORMAT(.1250, 'p3', 'en-us') R4,
  FORMAT(.1250, 'p', 'vi-vn') R5;
+---------+------+------+----------+--------+
| R1      | R2   | R3   | R4       | R5     |
|---------+------+------+----------+--------|
| 12.34 % | 12 % | 13 % | 12.500 % | 12,50% |
+---------+------+------+----------+--------+
R o r

Andata e ritorno . Tenta di garantire che un valore numerico convertito in una stringa venga analizzato nuovamente nello stesso valore numerico.

L'identificatore di precisione viene ignorato quando si utilizza questo identificatore di formato.

NOTA :In .NET, questo identificatore di formato è supportato solo da Single , Doppio e BigInteger tipi di numeri. Inoltre, per Doppio valori, questo identificatore di formato in alcuni casi non riesce a eseguire correttamente il round trip del valore originale. Offre anche scarse prestazioni se utilizzato con il Double e Singolo tipi.

Inoltre, la documentazione .NET consiglia di utilizzare questo identificatore di formato per BigInteger digitare solo. Si consiglia di raddoppiare i tipi usano G17 e Singolo i tipi usano G9 .

Cosa significa questo per SQL Server? Fondamentalmente dovresti probabilmente evitare questo identificatore di formato in SQL Server. Invece, usa G17 per il galleggiante tipo di dati e G9 per il reale tipo di dati.

Esempi
Ecco un esempio che confronta la R identificatore di formato con G17 e G9 .

DECLARE @myFloat float, @myReal real;
SET @myFloat = '123456789.1234567';
SET @myReal = @myFloat;
SELECT 
  @myFloat 'Float Value', 
  @myReal 'Real Value';
SELECT 
  FORMAT(@myFloat, 'R') 'Float R',
  FORMAT(@myFloat, 'G17') 'Float G17',
  FORMAT(@myReal, 'R') 'Real R',
  FORMAT(@myReal, 'G9') 'Real G9';
+------------------+--------------+
| Float Value      | Real Value   |
|------------------+--------------|
| 123456789.123457 | 1.234568E+08 |
+------------------+--------------+
(1 row affected)
+-------------------+-------------------+-----------+-----------+
| Float R           | Float G17         | Real R    | Real G9   |
|-------------------+-------------------+-----------+-----------|
| 123456789.1234567 | 123456789.1234567 | 123456792 | 123456792 |
+-------------------+-------------------+-----------+-----------+
(1 row affected)
X o x

esadecimale . Converte il numero in una stringa di cifre esadecimali.

Il caso utilizzato (cioè X o x ) specifica se utilizzare caratteri maiuscoli o minuscoli per cifre esadecimali maggiori di 9. Questo perché i valori esadecimali possono essere costituiti dai seguenti caratteri; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e e f (in entrambi i casi). Maiuscole e minuscole rappresentano lo stesso valore quando si utilizza l'esadecimale (ad esempio, f e F entrambi convertono in 15 in decimale).

Questo identificatore di formato è supportato solo per i tipi integrali.

Se viene utilizzato l'identificatore di precisione (opzionale), specifica il numero totale di cifre nel risultato. Se il numero non ha tante cifre, verrà riempito con zeri alla sua sinistra.

Esempi :

SELECT 
  FORMAT(123, 'X') R1,
  FORMAT(123, 'x') R2,
  FORMAT(123, 'x6') R3,
  FORMAT(12345678, 'x') R4,
  FORMAT(123, 'x6') R5,
  FORMAT(-123, 'x') R6,
  FORMAT(1.23, 'X') R7;
+------+------+--------+--------+--------+----------+------+
| R1   | R2   | R3     | R4     | R5     | R6       | R7   |
|------+------+--------+--------+--------+----------+------|
| 7B   | 7b   | 00007b | bc614e | 00007b | ffffff85 | NULL |
+------+------+--------+--------+--------+----------+------+

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

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

Oltre allo standard di cui sopra stringhe di formato, puoi anche usare personalizzato stringhe di formato. Ecco un elenco completo di stringhe di formato numerico personalizzate 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.