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.