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

Cómo formatear números en SQL Server

A partir de SQL Server 2012, puede formatear tipos numéricos usando T-SQL FORMAT() función. Esta función acepta tres argumentos; el número, el formato y un argumento de "cultura" opcional.

Devuelve una cadena formateada de tipo nvarchar .

El formato se proporciona como una cadena de formato. Una cadena de formato define cómo debe formatearse la salida.

He aquí un ejemplo:

SELECT FORMAT(1, 'N');

Resultado:

1.00

En este caso, usé N como segundo argumento. Este es el especificador de formato numérico estándar para Número. Este especificador de formato particular (N ) hace que la salida se formatee con dígitos enteros y decimales, separadores de grupo y un separador decimal con signo negativo opcional. Este argumento no distingue entre mayúsculas y minúsculas, por lo que N o n está bien.

Posiciones decimales

Aquí hay otro ejemplo, esta vez usando N1 para especificar que solo queremos un lugar decimal:

SELECT FORMAT(1, 'N1');

Resultado:

1.0

Pero también puedes aumentar el número de lugares decimales:

SELECT FORMAT(1, 'N7');

Resultado:

1.0000000

En estos ejemplos, el 1 y 7 se conocen como especificadores de precisión .

Los especificadores de precisión son opcionales. Pueden ser un valor de 0 a 99, que especifica la precisión del resultado. Su funcionamiento depende del especificador de formato que se utilice. Para algunos especificadores de formato, especificará el número total de dígitos en el resultado, para otros especificará el número de lugares decimales. En otros casos, se ignorará por completo. Consulte la lista completa de especificadores de formato numérico estándar para ver cómo los especificadores de precisión afectan la salida de cada especificador de formato.

Porcentaje

Los siguientes ejemplos usan la P argumento, que formatea el número como un valor porcentual. Multiplica el número por 100 y luego agrega un signo de porcentaje localizado.

SELECT 
    FORMAT(1, 'P') AS 'Example 1', 
    FORMAT(.375, 'P') AS 'Example 2', 
    FORMAT(.0375, 'P', 'tr-tr') AS 'Example 3';

Resultado:

Example 1  Example 2  Example 3
---------  ---------  ---------
100.00 %   37.50 %    %3,75   

Tenga en cuenta que el "Ejemplo 3" incluye un tercer argumento, que especifica la referencia cultural que se usará en la salida. En este caso, uso tr-tr para turco. Esto da como resultado que el signo de porcentaje se anteponga al número (en lugar de agregarlo, como los demás). También da como resultado que se use una coma como separador decimal.

Si no proporciona el argumento "cultura", se utiliza el idioma de la sesión actual.

Como puede imaginar, podría obtener resultados bastante diferentes según su idioma actual o el valor de cualquier argumento de "cultura". Consulte Cómo la configuración de idioma puede afectar los resultados de FORMAT() para obtener más ejemplos.

Moneda

Puedes usar C para devolver un valor de moneda.

SELECT FORMAT(1, 'C');

Resultado:

$1.00

También puede agregar la configuración regional como un tercer parámetro.

Estos son algunos ejemplos:

SELECT 
    FORMAT(1, 'C', 'fr-FR') AS France, 
    FORMAT(1, 'C', 'th-TH') AS Thailand, 
    FORMAT(1, 'C', 'ja-JP') AS Japan;

Resultado:

France  Thailand  Japan
------  --------  -----
1,00 €  ฿1.00     ¥1   

Exponencial (Científico)

Puedes usar E para especificar la notación exponencial.

SELECT FORMAT(1234.56789, 'E');

Resultado:

1.234568E+003  

hexadecimal

Incluso puede formatear un número como hexadecimal. Para hacer esto, use la X argumento:

SELECT FORMAT(10, 'X');

Resultado:

A

El hexadecimal es base 16. Por lo tanto, la cuenta va 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F antes de comenzar de nuevo (por ejemplo, 10 en hexadecimal es el equivalente de 16 en decimal, y 11 es el equivalente de 17, etc.). Es por eso que el ejemplo aquí da como resultado A , porque en hexadecimal, A viene después de 9 .

Aquí hay otro ejemplo, esta vez con un número mayor:

SELECT FORMAT(7145, 'X');

Resultado:

1BE9

Formato personalizado

También puede crear su propio formato personalizado mediante una cadena de formato numérico personalizado. Esto consiste en una serie de especificadores de formato numérico personalizados que proporcionan un patrón para su número.

Esto se explica más fácilmente con un ejemplo:

SELECT FORMAT(123456789, '##-###-####');

Resultado:

12-345-6789

En este caso, uso el marcador de posición de dígito (# ). El marcador de posición de dígito me permite especificar un formato para el número, usando el # símbolo como marcador de posición para cada número.

Comas

Otro ejemplo:

SELECT FORMAT(123456789, '#,#');

Resultado:

123,456,789

Ceros a la izquierda

Otro especificador de formato numérico personalizado es cero (0 ). Puede usar esto para rellenar un número con ceros a la izquierda:

SELECT
    FORMAT(7, '000') AS 'Example 1',
    FORMAT(123, '0000') AS 'Example 2',
    FORMAT(123, '00000') AS 'Example 3';

Resultado:

Example 1  Example 2  Example 3
---------  ---------  ---------
007        0123       00123    

También puede usarlo para eliminar ceros:

SELECT 
    FORMAT(0123, '000') AS 'Example 1',
    FORMAT(0123, '0000') AS 'Example 2',
    FORMAT(000123, '00000') AS 'Example 3';

Resultado:

Example 1  Example 2  Example 3
---------  ---------  ---------
123        0123       00123    

Referencia de especificadores de formato numérico

Los siguientes artículos contienen todos los especificadores de formato numérico que puede usar con FORMAT() función, junto con ejemplos de T-SQL.

  • Cadenas de formato numérico estándar
  • Cadenas de formato numérico personalizado

Estos son los mismos especificadores de formato que son compatibles con .NET Framework (el FORMAT() función se basa en .NET Framework).

Fecha y hora

El FORMAT() La función también le permite formatear la fecha y la hora.

La fecha y la hora tienen un conjunto separado de especificadores de formato:

  • Cadenas de formato de fecha y hora estándar
  • Cadenas de formato de fecha y hora personalizado