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.