sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo dar formato a números como moneda en PostgreSQL

Para formatear un número como moneda en Postgres, puede convertirlo al tipo de datos de dinero o usar to_char() para convertirlo en texto que incluya el símbolo de moneda apropiado.

Obviamente, esto supone que el número aún no está almacenado usando el tipo de dinero.

A continuación se muestran ejemplos de cada una de estas opciones.

Convertir en dinero

Este es un ejemplo de cómo convertir un número al tipo de datos de dinero.

SELECT cast(12 as money);

Resultado:

$12.00

Aquí hay otro ejemplo, esta vez usando una cantidad mayor.

SELECT cast(123456.78 as money);

Resultado:

$123,456.78

Convertir desde un número de coma flotante

Se recomienda no usar números de punto flotante para manejar dinero debido a la posibilidad de errores de redondeo. Sin embargo, si debe hacerlo, puede convertir primero a numérico y luego a dinero.

SELECT '123456.78'::float8::numeric::money;

Resultado:

$123,456.78

Si intenta convertir directamente de punto flotante a dinero, obtendrá un error.

SELECT '123456.78'::float8::money;

Resultado:

ERROR:  cannot cast type double precision to money

Convertir a texto

Aquí hay un ejemplo del uso de to_char() para convertir el valor a texto con el símbolo de moneda incluido.

SELECT to_char(12, 'L99D99');

Resultado:

$ 12.00

Aquí, tanto el símbolo de moneda como el lugar decimal utilizan la configuración regional actual.

La cadena de formato para to_char() tendrá que ser apropiado para la cantidad esperada.

Por ejemplo, si la cantidad pudiera ascender a cientos de miles, la siguiente cadena de formato sería más adecuada.

SELECT to_char(123456.78, 'L999G999D99');

Resultado:

$ 123,456.78

En este caso agregué la G patrón de plantilla para un separador de grupo consciente de la configuración regional (también denominado "separador de miles"). Podría haber usado una coma (, ), pero eso no habría tenido en cuenta la configuración regional.

Y nuevamente agregué la D patrón de plantilla para un punto decimal compatible con la configuración regional.

Esto es lo que sucede si elimino esos dos patrones de plantilla de mi cadena de formato.

SELECT to_char(123456.78, 'L999999');

Resultado:

$ 123457

Ceros Insignificantes

Puedes usar 0 en lugar de 9 para mantener ceros insignificantes.

El 9 el patrón de plantilla elimina cualquier cero insignificante mientras que el 0 patrón de plantilla no lo hace.

Aquí hay un ejemplo que ilustra la diferencia entre los dos.

SELECT 
  to_char(12, 'L9999') AS "L9999",
  to_char(12, 'L0000') AS "L0000";

Resultado:

 L9999  | L0000  
--------+--------
 $   12 | $ 0012

Modo de relleno

Hay un práctico modificador de patrón de plantilla llamado FM . Esto es para el "modo de relleno" y suprime los ceros finales y los espacios en blanco iniciales.

Por lo tanto, podemos usar ese modificador para modificar el ejemplo anterior.

SELECT 
  to_char(12, 'LFM9999') AS "LFM9999",
  to_char(12, 'LFM0000') AS "LFM0000";

Resultado:

 LFM9999 | LFM0000 
---------+---------
 $12     | $0012

Observe que suprimió los espacios en blanco iniciales entre el signo de dólar y el número.