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

Cómo dar formato a números con comas en SQL Server

SQL Server nos proporciona una forma rápida y fácil de formatear números con comas insertadas en el lugar correspondiente. Por ejemplo, 1234.56 puede convertirse en 1.234,56 . O puede convertirse en 1.234,56 , si esa es la configuración regional que está utilizando.

Ejemplo

Podemos usar el FORMAT() función para formatear números con comas. Cuando usamos esta función, pasamos el número y una cadena de formato. La cadena de formato determina cómo se formateará el número cuando se devuelva.

El FORMAT() La función devuelve una representación de cadena formateada del número, según los valores que proporcionamos.

Aquí hay un ejemplo para demostrarlo:

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

Resultado:

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

Este ejemplo demuestra tres de las cadenas de formato numérico estándar:

  • Si solo queremos el número formateado, podemos usar N
  • Si queremos que se formatee como un porcentaje, podemos usar P
  • Para moneda, podemos usar C .

SQL Server es lo suficientemente inteligente como para conocer su configuración regional actual (según el idioma de la sesión actual) y formatea el resultado de acuerdo con las convenciones de esa configuración regional. Esto es importante, porque no todo el mundo vive en un país que utiliza una coma como separador de miles y un punto como separador decimal .

Además, el FORMAT() La función acepta un tercer argumento de "cultura" opcional, que le permite especificar explícitamente la configuración regional.

He aquí un ejemplo de lo que quiero decir:

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";

Resultado:

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

En este caso especifico de-de como la referencia cultural, lo que significa que los resultados se formatearán de acuerdo con las convenciones alemanas. Podemos ver que los puntos se usan como separador de grupos y una coma para el separador decimal .

Si se omite el tercer argumento, se utiliza el idioma de la sesión actual.

Cadenas de formato personalizado

También es posible usar especificadores de formato personalizado para construir sus propias cadenas de formato personalizado. Por ejemplo, el # carácter es un marcador de posición de dígito, el 0 es un marcador de posición cero, la coma (, ) es un marcador de posición para el separador de grupo y el punto final (. ) es un marcador de posición para el separador decimal .

Esto es cierto independientemente de la configuración regional que se utilice:SQL Server determinará qué caracteres usar para el grupo y los separadores decimales en función de la configuración regional actual.

Ejemplo:

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

Resultado:

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

En ambos casos, utilicé la misma cadena de formato, pero SQL Server devolvió los separadores decimales y de grupo que eran aplicables a la configuración regional especificada (que se especificó con el tercer argumento "cultura").

En el ejemplo anterior, la cadena de formato incluye más dígitos que el número real. Independientemente, SQL Server optó por no devolver ceros a la izquierda. Eso es porque usamos el # especificador de formato.

Si queremos que SQL Server devuelva ceros a la izquierda, podemos usar el 0 especificador de 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";

Resultado:

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