Problème :
Vous souhaitez convertir une chaîne en une valeur décimale dans PostgreSQL.
Convertissons la valeur d'une chaîne en un type de données DECIMAL.
Solution 1 :
Nous utiliserons l'opérateur ::. Voici la requête que vous écririez :
SELECT ' 5800.79 '::DECIMAL;
Voici le résultat :
numérique |
---|
5800.79 |
Comme vous le constatez, les espaces de début et de fin ont été supprimés.
Discussion :
Utilisez l'opérateur ::pour convertir les chaînes contenant des valeurs numériques dans le type de données DECIMAL. Dans notre exemple, nous avons converti la chaîne ' 5800.79 ' en 5800.79 (une valeur DECIMAL).
Cet opérateur est utilisé pour convertir entre différents types de données. Il est très populaire dans PostgreSQL. Vous pouvez également utiliser l'opérateur SQL standard, CAST()
, au lieu du ::
opérateur.
Solution 2 :
SELECT CAST(' 5800.79 ' AS DECIMAL );
Voici le résultat :
numérique |
---|
5800.79 |
Notez que CAST()
, comme le ::
opérateur, supprime les espaces supplémentaires au début et à la fin de la chaîne avant de la convertir en nombre.
La base de données PostgreSQL fournit une autre façon de convertir. Utilisez le TO_NUMBER()
fonction si vous avez besoin de convertir des chaînes plus compliquées. Cette fonction prend deux arguments :la chaîne à convertir et le masque de format qui indique comment chaque caractère de la chaîne doit être interprété. Voir l'exemple ci-dessous :
Solution 3 :
SELECT TO_NUMBER(' 5 800,79- ', 'FM9G999D99S' );
Voici le résultat :
numérique |
---|
-5800.79 |
La chaîne de format décrit la chaîne contenant le nombre (valeur d'entrée sous forme de chaîne). Dans cet exemple, ce masque contient le symbole « FM », qui supprime les espaces de début et de fin. Le « 9 » indique un chiffre (dans notre exemple, 5) et le « G » représente un groupe de chiffres (dans notre exemple, un espace indique un groupe de milliers).
Ensuite, « 999 » indique trois chiffres supplémentaires (800).
Le symbole ‘D’ spécifie un signe décimal (ici, un point/point ‘.’). Après le symbole décimal vient "99", ou deux chiffres fractionnaires.
Le dernier symbole, 'S', spécifie l'utilisation d'un signe plus ou moins (notre nombre est négatif, il obtient donc un moins).
Voici les symboles les plus utilisés pour ce masque :
symbole | description |
---|---|
FM | zéros non significatifs et espaces de remplissage |
9 | un chiffre |
. | point décimal local |
G | séparateur de groupe |
D | séparateur décimal local |
S | signe moins ou plus |
L | symbole de la devise locale |
Vous pouvez trouver plus d'informations sur le formatage numérique dans la documentation PostgreSQL.