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

Comment supprimer les zéros de fin d'un nombre décimal dans PostgreSQL

Problème :

Vous souhaitez supprimer les zéros de fin de la partie fractionnaire d'un nombre décimal.

Exemple :

Notre base de données a une table nommée ribbon avec des données dans les colonnes id , nom , et largeur (en mètres, indiqué par un nombre décimal avec une partie fractionnaire à 4 chiffres).

identifiant nom largeur
1 Grand Satin N24 1.2000
2 Création Yc2 0.5500
3 Trois couleurs 4F1 3.2050
4 Ruban bleu LB1 0,1265

Obtenons les noms des rubans avec leur largeur en mètres, mais sans zéros à la fin.

Solution :

Nous utiliserons l'opérateur ‘::’ pour convertir le nombre décimal en un type de données REAL. Voici la requête que vous écririez :

SELECT name, 
  width::REAL 
FROM ribbon;

Voici le résultat :

nom nouvelle_largeur
Grand Satin N24 1.2
Création Yc2 0,55
Trois couleurs 4F1 3.205
Ruban bleu LB1 0,1265

Discussion :

Utilisez le :: opérateur pour convertir un nombre décimal contenant des zéros à la fin en un nombre sans zéros supplémentaires. Cet opérateur convertit la valeur de gauche en type de données placé à droite.

Dans notre exemple, la valeur décimale de largeur a été convertie en type de données REAL, qui n'affiche pas de zéros à la fin. Le ruban "Large Satin N24" a une width valeur de 1,2000 - mais nous n'avons pas besoin de zéros dans la partie fractionnaire de ce nombre. Par conséquent, nous avons converti le type de données REAL pour les couper (dans notre exemple, trois zéros ont été supprimés). C'est un moyen pratique d'afficher le nombre car il ne supprime que les zéros de fin; par exemple, 'Blue Ribbon LB1' n'a pas de zéros après la virgule, sa valeur reste donc la même après la conversion.

Si vous avez le même nombre de zéros dans la partie fractionnaire de toutes vos valeurs, utilisez le TRUNC() une fonction. Il prend deux arguments :le nom de la valeur/colonne contenant le nombre et un entier indiquant le nombre souhaité de chiffres fractionnaires; le reste est coupé. Regardez le même exemple avec des valeurs différentes dans la colonne width :

identifiant nom largeur
1 Grand Satin N24 1.200
2 Création Yc2 0,500
3 Trois couleurs 4F1 3.200
4 Ruban bleu LB1 0.100

Solution 2 :

Voici la requête que vous écririez :

SELECT name, 
  TRUNC(width,1) 
FROM ribbon;

Voici le résultat :

nom nouvelle_largeur
Grand Satin N24 1.0
Création Yc2 0.5
Trois couleurs 4F1 3.2
Ruban bleu LB1 0.1

Un seul chiffre est affiché dans la partie décimale. Notez que TRUNC() coupe tous les chiffres, pas seulement les zéros.