Problem:
Du vil gerne fjerne efterfølgende nuller fra brøkdelen af et decimaltal.
Eksempel:
Vores database har en tabel med navnet ribbon
med data i kolonnerne id , navn og bredde (i meter, angivet med et decimaltal med en 4-cifret brøkdel).
id | navn | bredde |
---|---|---|
1 | Large Satin N24 | 1.2000 |
2 | Creation Yc2 | 0,5500 |
3 | Tre farve 4F1 | 3.2050 |
4 | Blå bånd LB1 | 0,1265 |
Lad os få navnene på bånd sammen med deres bredde i meter, men uden efterfølgende nuller.
Løsning:
Vi bruger operatoren ‘::’
at konvertere decimaltallet til en RIGTIG datatype. Her er den forespørgsel, du ville skrive:
SELECT name, width::REAL FROM ribbon;
Her er resultatet:
navn | ny_bredde |
---|---|
Stor satin N24 | 1.2 |
Creation Yc2 | 0,55 |
Tre farve 4F1 | 3.205 |
Blå bånd LB1 | 0,1265 |
Diskussion:
Brug ::
operator til at konvertere et decimaltal, der indeholder efterfølgende nuller, til et tal uden yderligere nuller. Denne operator konverterer værdien til venstre til datatypen placeret til højre.
I vores eksempel blev decimalværdien i bredden konverteret til REAL datatypen, som ikke viser efterfølgende nuller. ‘Large Satin N24’-båndet har en width
værdi på 1.2000 - men vi behøver ikke nuller i brøkdelen af dette tal. Derfor konverterede vi til REAL datatypen for at klippe dem (i vores eksempel blev tre nuller fjernet). Det er en bekvem måde at vise tallet på, fordi det kun fjerner de efterfølgende nuller; for eksempel har 'Blue Ribbon LB1' ikke nogen efterfølgende nuller efter decimalkommaet, så dens værdi forbliver den samme efter konvertering.
Hvis du har det samme antal nuller i brøkdelen af alle dine værdier, skal du bruge TRUNC()
fungere. Det kræver to argumenter:værdien/kolonnenavnet, der indeholder tallet og et heltal, der angiver det ønskede antal brøkcifre; resten skæres. Se på det samme eksempel med forskellige værdier i kolonnen width
:
id | navn | bredde |
---|---|---|
1 | Large Satin N24 | 1.200 |
2 | Creation Yc2 | 0,500 |
3 | Tre farve 4F1 | 3.200 |
4 | Blå bånd LB1 | 0,100 |
Løsning 2:
Her er den forespørgsel, du ville skrive:
SELECT name, TRUNC(width,1) FROM ribbon;
Her er resultatet:
navn | ny_bredde |
---|---|
Stor satin N24 | 1.0 |
Creation Yc2 | 0,5 |
Tre farve 4F1 | 3.2 |
Blå bånd LB1 | 0,1 |
Kun ét ciffer vises i decimaldelen. Bemærk, at TRUNC() skærer alle cifre, ikke kun nuller.