PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment formater des nombres en tant que devise dans PostgreSQL

Pour formater un nombre en tant que devise dans Postgres, vous pouvez soit le convertir en type de données monétaire, soit utiliser to_char() pour le convertir en texte incluant le symbole monétaire approprié.

Cela suppose évidemment que le nombre n'est pas déjà stocké en utilisant le type d'argent.

Vous trouverez ci-dessous des exemples de chacune de ces options.

Convertir en argent

Voici un exemple de conversion d'un nombre en type de données monétaire.

SELECT cast(12 as money);

Résultat :

$12.00

Voici un autre exemple, cette fois en utilisant un montant plus important.

SELECT cast(123456.78 as money);

Résultat :

$123,456.78

Convertir à partir d'un nombre à virgule flottante

Il est déconseillé d'utiliser des nombres à virgule flottante pour gérer l'argent en raison du risque d'erreurs d'arrondi. Cependant, si vous devez le faire, vous pouvez d'abord convertir en numérique, puis en argent.

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

Résultat :

$123,456.78

Si vous essayez de convertir directement de virgule flottante en argent, vous obtiendrez une erreur.

SELECT '123456.78'::float8::money;

Résultat :

ERROR:  cannot cast type double precision to money

Convertir en texte

Voici un exemple d'utilisation de to_char() pour convertir la valeur en texte avec le symbole monétaire inclus.

SELECT to_char(12, 'L99D99');

Résultat :

$12.00

Ici, le symbole monétaire et la décimale utilisent les paramètres régionaux actuels.

La chaîne de format pour to_char() devra être approprié pour le montant prévu.

Par exemple, si le montant pouvait atteindre des centaines de milliers, la chaîne de format suivante serait plus appropriée.

SELECT to_char(123456.78, 'L999G999D99');

Résultat :

$123,456.78

Dans ce cas, j'ai ajouté le G modèle de modèle pour un séparateur de groupe compatible avec les paramètres régionaux (également appelé « séparateur de milliers »). J'aurais pu utiliser une virgule (, ), mais cela n'aurait pas été sensible aux paramètres régionaux.

Et j'ai encore ajouté le D modèle de modèle pour un point décimal compatible avec les paramètres régionaux.

Voici ce qui se passe si je supprime ces deux modèles de modèles de ma chaîne de format.

SELECT to_char(123456.78, 'L999999');

Résultat :

$ 123457

Zéros non significatifs

Vous pouvez utiliser 0 au lieu de 9 pour conserver les zéros non significatifs.

Le 9 modèle de modèle supprime tous les zéros non significatifs alors que le 0 le modèle de modèle ne le fait pas.

Voici un exemple qui illustre la différence entre les deux.

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

Résultat :

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

Mode de remplissage

Il existe un modificateur de modèle de modèle pratique appelé FM . C'est pour le "mode de remplissage", et il supprime les zéros de fin et les blancs de début.

Nous pouvons donc utiliser ce modificateur pour modifier l'exemple précédent.

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

Résultat :

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

Notez qu'il a supprimé les blancs de tête entre le signe dollar et le nombre.