PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So entfernen Sie nachgestellte Nullen aus einer Dezimalzahl in PostgreSQL

Problem:

Sie möchten nachgestellte Nullen aus dem Bruchteil einer Dezimalzahl entfernen.

Beispiel:

Unsere Datenbank hat eine Tabelle namens ribbon mit Daten in den Spalten id , Name und Breite (in Metern, angegeben durch eine Dezimalzahl mit einem 4-stelligen Bruchteil).

id Name Breite
1 Großer Satin N24 1.2000
2 Erstellung Yc2 0,5500
3 Dreifarbig 4F1 3.2050
4 Blaues Band LB1 0,1265

Holen wir uns die Namen der Bänder zusammen mit ihrer Breite in Metern, aber ohne nachgestellte Nullen.

Lösung:

Wir verwenden den Operator ‘::’ um die Dezimalzahl in einen REAL-Datentyp umzuwandeln. Hier ist die Abfrage, die Sie schreiben würden:

SELECT name, 
  width::REAL 
FROM ribbon;

Hier ist das Ergebnis:

name neue_Breite
Großer Satin N24 1.2
Erstellung Yc2 0,55
Dreifarbig 4F1 3.205
Blaues Band LB1 0,1265

Diskussion:

Verwenden Sie den :: -Operator, um eine Dezimalzahl mit nachgestellten Nullen in eine Zahl ohne zusätzliche Nullen umzuwandeln. Dieser Operator wandelt den Wert links in den rechts platzierten Datentyp um.

In unserem Beispiel wurde der Dezimalwert in Breite in den REAL-Datentyp konvertiert, der keine nachgestellten Nullen anzeigt. Das „Large Satin N24“-Band hat eine width Wert von 1,2000 – aber wir brauchen keine Nullen im Bruchteil dieser Zahl. Daher haben wir sie in den REAL-Datentyp konvertiert, um sie zu kürzen (in unserem Beispiel wurden drei Nullen entfernt). Es ist eine bequeme Möglichkeit, die Zahl anzuzeigen, da nur die nachgestellten Nullen entfernt werden. Beispielsweise hat „Blue Ribbon LB1“ keine abschließenden Nullen nach dem Dezimalkomma, sodass sein Wert nach der Konvertierung gleich bleibt.

Wenn Sie die gleiche Anzahl von Nullen im Bruchteil all Ihrer Werte haben, verwenden Sie TRUNC() Funktion. Es braucht zwei Argumente:den Wert/Spaltennamen, der die Zahl und eine Ganzzahl enthält, die die gewünschte Anzahl von Nachkommastellen angibt; der Rest wird geschnitten. Betrachten Sie dasselbe Beispiel mit unterschiedlichen Werten in der Spalte width :

id Name Breite
1 Großer Satin N24 1.200
2 Erstellung Yc2 0,500
3 Dreifarbig 4F1 3.200
4 Blaues Band LB1 0,100

Lösung 2:

Hier ist die Abfrage, die Sie schreiben würden:

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

Hier ist das Ergebnis:

name neue_Breite
Großer Satin N24 1.0
Erstellung Yc2 0,5
Dreifarbig 4F1 3.2
Blaues Band LB1 0,1

Im Dezimalteil wird nur eine Ziffer angezeigt. Beachten Sie, dass TRUNC() alle Ziffern schneidet, nicht nur Nullen.