PostgreSQLLa base de données la plus sophistiquée au monde.

8.2. Types monétaires

Le type money stocke un montant en devise avec un nombre fixe de décimales. Voir le Tableau 8.3, « Types monétaires ». La précision de la partie fractionnée est déterminée par le paramètre lc_monetary de la base de données. De nombreux formats sont acceptés en entrée, dont les entiers et les nombre à virgule flottante, ainsi que les formats classiques de devises, comme '$1,000.00'. Le format de sortie est généralement dans le dernier format, mais dépend de la locale. Les valeurs numériques qui ne sont pas entre guillemets peuvent être converties dans le type money en convertissant la valeur numérique en text puis en money, par exemple :

SELECT 1234::text::money;

Il n'existe pas de moyen simple de faire l'inverse d'une façon indépendante de la locale, donc en convertissant une valeur de type money en un type numérique. Si vous connaissez le symbole de la monnaie et le séparateur des milliers, vous pouvez utiliser regexp_replace() :

SELECT regexp_replace('52093.89'::money::text, '[$,]', '', 'g')::numeric;

Comme l'affichage de ce type de données est sensible à la casse, charger des données du type money dans une base de données qui a une configuration différente de lc_monetary pourrait ne pas fonctionner. Pour éviter les problèmes, assurez-vous, avant de restaurer une sauvegarde dans une nouvelle base de données, que la variable lc_monetary a la même valeur ou une valeur équivalente à celle qui était configurée lors de la sauvegarde.

Tableau 8.3. Types monétaires

Nom Taille de stockage Description Étendue
money 8 octets montant monétaire -92233720368547758.08 à +92233720368547758.07