sql >> Database >  >> RDS >> PostgreSQL

Hoe achterlopende nullen van een decimaal te verwijderen in PostgreSQL

Probleem:

U wilt naloopnullen verwijderen uit het breukgedeelte van een decimaal getal.

Voorbeeld:

Onze database heeft een tabel met de naam ribbon met gegevens in de kolommen id , naam , en breedte (in meters, aangegeven door een decimaal getal met een 4-cijferig breukdeel).

id naam breedte
1 Grote satijn N24 1.2000
2 Creatie Yc2 0.5500
3 Drie kleuren 4F1 3.2050
4 Blauw lint LB1 0.1265

Laten we de namen van linten samen met hun breedte in meters geven, maar zonder nullen.

Oplossing:

We gebruiken de operator ‘::’ om het decimale getal om te zetten in een ECHT gegevenstype. Dit is de vraag die je zou schrijven:

SELECT name, 
  width::REAL 
FROM ribbon;

Dit is het resultaat:

naam nieuwe_breedte
Grote satijnen N24 1.2
Creatie Yc2 0,55
Drie kleuren 4F1 3.205
Blauw lint LB1 0.1265

Discussie:

Gebruik de :: operator om een ​​decimaal getal met volgnullen om te zetten in een getal zonder extra nullen. Deze operator converteert de waarde aan de linkerkant naar het gegevenstype dat aan de rechterkant is geplaatst.

In ons voorbeeld is de decimale waarde in de breedte geconverteerd naar het REAL-gegevenstype, dat geen volgnullen weergeeft. Het lint ‘Large Satin N24’ heeft een width waarde van 1.2000 - maar we hebben geen nullen nodig in het fractionele deel van dit getal. Daarom hebben we geconverteerd naar het REAL-gegevenstype om ze te knippen (in ons voorbeeld zijn drie nullen verwijderd). Het is een handige manier om het nummer weer te geven, omdat alleen de volgende nullen worden verwijderd; 'Blue Ribbon LB1' heeft bijvoorbeeld geen nullen achter de komma, dus de waarde blijft hetzelfde na conversie.

Als u hetzelfde aantal nullen heeft in het fractionele deel van al uw waarden, gebruikt u de TRUNC() functie. Er zijn twee argumenten nodig:de waarde/kolomnaam die het getal bevat en een geheel getal dat het gewenste aantal fractionele cijfers aangeeft; de rest is gesneden. Bekijk hetzelfde voorbeeld met verschillende waarden in de kolom width :

id naam breedte
1 Grote satijn N24 1.200
2 Creatie Yc2 0,500
3 Drie kleuren 4F1 3.200
4 Blauw lint LB1 0,100

Oplossing 2:

Dit is de vraag die je zou schrijven:

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

Dit is het resultaat:

naam nieuwe_breedte
Grote satijnen N24 1.0
Creatie Yc2 0,5
Drie kleuren 4F1 3.2
Blauw lint LB1 0,1

Er wordt slechts één cijfer weergegeven in het decimale gedeelte. Merk op dat TRUNC() alle cijfers knipt, niet alleen nullen.


  1. Hoe de IDENTITY()-functie in SQL Server te gebruiken?

  2. Hoe postgresql voor de eerste keer configureren?

  3. Oracle Database BLOB naar InputStream in Java?

  4. Hoe zorg je ervoor dat toonaangevende wildcard-zoekopdrachten in volledige tekst werken in SQL Server?