sql >> Base de Datos >  >> RDS >> Sqlserver

Cadenas de formato numérico personalizado compatibles con FORMAT() en SQL Server

Este artículo proporciona una referencia para los especificadores de formato numérico personalizados que se pueden usar al formatear números usando FORMAT() función en SQL Server. Ejemplos incluidos.

Cadena de formato Descripción/Ejemplo
0

Marcador de posición cero . Reemplaza el cero con el dígito correspondiente si hay uno presente; de lo contrario, aparece cero en la cadena de resultados.

Ejemplos :

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   |
+------+------+------+------+------+
#

Marcador de posición de dígito . Reemplaza el símbolo “#” con el dígito correspondiente si hay uno presente; de lo contrario, no aparece ningún dígito en la cadena de resultados.

No aparece ningún dígito en la cadena de resultados si el dígito correspondiente en la cadena de entrada es un 0 no significativo.

Ejemplos :

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 decimal . Determina la ubicación del separador decimal en la cadena de resultados.

Ejemplos :

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 |
+------+-------+------+-------+
,

Separador de grupos y escala de números . Se puede utilizar como separador de grupos (también conocido como separador de miles) y como especificador de escala de números.

  • Como separador de grupos , inserta un carácter separador de grupo localizado entre cada grupo.
  • Como especificador de escala numérica , divide un número por 1000 para cada coma especificada.

Para especificar un separador de grupo, coloque una o más comas entre marcadores de posición de dos dígitos (0 o #) que dan formato a los dígitos enteros de un número. Esto da como resultado que se inserte un carácter separador de grupo entre cada grupo de números en la parte integral de la salida.

Para especificar un especificador de escala de números, coloque una o más comas inmediatamente a la izquierda del punto decimal explícito o implícito.

Ejemplos:como separador de grupo :

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 |
+--------------+------------+------------+

Ejemplos:como especificador de escala numérica :

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

Ejemplos:como ambos :

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

Marcador de posición de porcentaje . Multiplica un número por 100 e inserta un símbolo de porcentaje localizado en la cadena de resultados.

Ejemplos :

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% |
+--------+-------+------+--------+-------+

Marcador de posición por mil . Multiplica un número por 1000 e inserta un símbolo localizado por mil en la cadena de resultados.

Ejemplos :

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

Notación exponencial . Si va seguido de al menos un cero (0 ), formatea el resultado usando notación exponencial. El caso (E o e ) indica el caso del símbolo del exponente en la cadena de resultados. El número de ceros que siguen a la E o e carácter determina el número mínimo de dígitos en el exponente. Un signo más (+ ) indica que un carácter de signo siempre precede al exponente. Un signo menos (- ) indica que un carácter de signo precede solo a los exponentes negativos.

Ejemplos :

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 |
+------+------+-------+-----------+------+

\

Personaje de escape . Hace que el siguiente carácter se interprete como un literal en lugar de un especificador de formato personalizado.

Ejemplo :

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

'string'
"string"

Delimitador de cadena literal . Indica que los caracteres incluidos deben copiarse en la cadena de resultados sin cambios.

Ejemplo :

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

;

Separador de secciones . Este es un especificador de formato condicional que define secciones con cadenas de formato separadas para números positivos, negativos y cero. Esto le permite aplicar diferentes formatos a un número dependiendo de si su valor es positivo, negativo o cero. Una cadena de formato personalizado puede contener hasta tres secciones separadas por punto y coma.

  • Una sección :La cadena de formato se aplica a todos los valores (al igual que en los ejemplos anteriores).
  • Dos secciones :La primera sección se aplica a valores positivos y ceros, y la segunda sección se aplica a valores negativos.

    Si el número al que se va a dar formato es negativo, pero se convierte en cero después de redondearlo según el formato de la segunda sección, el cero resultante se formatea según la primera sección.

  • Tres secciones :La primera sección se aplica a valores positivos, la segunda sección se aplica a valores negativos y la tercera sección se aplica a ceros.

    La segunda sección se puede dejar vacía (al no tener nada entre los puntos y comas), en cuyo caso la primera sección se aplica a todos los valores distintos de cero.

    Si el número al que se va a dar formato no es cero, pero se convierte en cero después de redondearlo según el formato de la primera o la segunda sección, el cero resultante se formatea según la tercera sección.

Tenga en cuenta que los valores negativos siempre se muestran sin un signo menos cuando se utilizan separadores de sección. Si desea que el valor con formato final tenga un signo menos, deberá incluir explícitamente el signo menos como parte de la cadena de formato personalizado. Esto también se aplica a cualquier otro formato preexistente asociado con un número.

Ejemplo:una sección (sin separadores de sección)
Esta es una cadena de formato típica que consta de una sección (al igual que en los ejemplos anteriores). Por lo tanto, no se utilizan separadores de separación.

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) |
+--------------+---------------+------------+

Tenga en cuenta que el signo menos permanece intacto, porque no usé ningún separador de sección.

Ejemplos:dos secciones :

/* 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) |
+----------------------+----------------------+

Ejemplos:tres secciones :

/* 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)         |
+----------------+-----------------+-----------+-------------------+
Otro

Todos los demás personajes. El carácter se copia en la cadena de resultados sin cambios.

Ejemplo :

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

La lista anterior es una lista completa de cadenas de formato personalizado de .NET válidas, según la información de la documentación oficial de .NET para cadenas de formato personalizado en el sitio web de Microsoft en el momento de escribir este artículo.

La razón por la que estos son relevantes para SQL Server FORMAT() La función es que solo acepta cadenas de formato .NET Framework válidas.

Además de los personalizados anteriores cadenas de formato, también puede usar estándar Cadenas de formato. Aquí hay una lista completa de cadenas de formato numérico estándar que puede usar con SQL Server.

También puede dar formato a los valores de fecha y hora. Consulte la lista de cadenas de formato de fecha y hora estándar, así como las cadenas de formato de fecha y hora personalizadas que puede usar con FORMAT() función.

Si todavía está tratando de comprender qué es una cadena de formato, consulte ¿Qué es una cadena de formato en SQL Server? para una comprensión básica de las cadenas de formato y cómo se relacionan con FORMAT() función.