sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man tar bort efterföljande nollor från en decimal i PostgreSQL

Problem:

Du vill ta bort avslutande nollor från bråkdelen av ett decimaltal.

Exempel:

Vår databas har en tabell som heter ribbon med data i kolumnerna id , namn och bredd (i meter, betecknad med ett decimaltal med en 4-siffrig bråkdel).

id namn bredd
1 Large Satin N24 1 2000
2 Creation Yc2 0,5500
3 Tre färg 4F1 3.2050
4 Blå band LB1 0,1265

Låt oss få namnen på band tillsammans med deras bredd i meter, men utan efterföljande nollor.

Lösning:

Vi använder operatorn ‘::’ för att konvertera decimaltalet till en RIKTIG datatyp. Här är frågan du skulle skriva:

SELECT name, 
  width::REAL 
FROM ribbon;

Här är resultatet:

namn new_width
Large Satin N24 1.2
Creation Yc2 0,55
Tre färg 4F1 3,205
Blå band LB1 0,1265

Diskussion:

Använd :: operator för att konvertera ett decimaltal som innehåller avslutande nollor till ett tal utan ytterligare nollor. Denna operator konverterar värdet till vänster till datatypen placerad till höger.

I vårt exempel konverterades decimalvärdet i bredd till datatypen REAL, som inte visar avslutande nollor. Bandet "Large Satin N24" har en width värde på 1,2000 – men vi behöver inte nollor i bråkdelen av detta tal. Därför konverterade vi till den REAL datatypen för att klippa dem (i vårt exempel togs tre nollor bort). Det är ett bekvämt sätt att visa numret eftersom det bara tar bort de avslutande nollorna; till exempel har 'Blue Ribbon LB1' inga avslutande nollor efter decimalkomma, så dess värde förblir detsamma efter konvertering.

Om du har samma antal nollor i bråkdelen av alla dina värden, använd TRUNC() fungera. Det krävs två argument:värdet/kolumnnamnet som innehåller talet och ett heltal som anger det önskade antalet bråksiffror; resten skärs. Titta på samma exempel med olika värden i kolumnen width :

id namn bredd
1 Large Satin N24 1 200
2 Creation Yc2 0,500
3 Tre färg 4F1 3 200
4 Blå band LB1 0,100

Lösning 2:

Här är frågan du skulle skriva:

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

Här är resultatet:

namn new_width
Large Satin N24 1.0
Creation Yc2 0,5
Tre färg 4F1 3.2
Blå band LB1 0.1

Endast en siffra visas i decimaldelen. Observera att TRUNC() skär alla siffror, inte bara nollor.


  1. Motsvarighet till varchar(max) i MySQL?

  2. Fixa "profilnamnet är inte giltigt" när du skickar e-post från SQL Server

  3. Trigger i SQL

  4. MySQL konverterar timediff-utdata till formatet dag, timme, minut, sekund