Avrunding Problem i SQL

SQL har tre funksjoner som kan runde verdier til et bestemt antall desimaler. Du kan bruke disse funksjonene til å løse en rekke databaserelaterte problemer, alt fra å bli kvitt fraksjoner av pennies på finansielle transaksjoner for å regularizing datainnganger fra flere vitenskapelige instrumenter. Hvis du er ny på SQL, kan dens avrundings funksjoner virke litt rart, og kan føre til noen tilpasningsproblemer.

konvensjonell Avrunding

SQL er "ROUND ()" funksjonen tar en eksisterende verdi og runder det til det angitte antall desimaler. Formatet er som følger:

ROUND ([value], [n], [1]))

Her er "[verdi]" er en desimal verdi, og «[n]" er antall sifre verdien bør være avrundet til. Konvensjonelle Avrunder verdier på 0,5 eller høyere opp, og verdier for 0,49 og lavere ned. Sette verdien til "0" runder til heltall verdier; sette verdien til "-1" runder til nærmeste multiplum av 10. "ROUND ()" -funksjonen tredje parameter, "[1]," avkorter nummeret til det angitte antall desimaler hvis satt til en hvilken som helst annen verdi enn null. En betydelig kilde til uventede avrundings problemene kommer når, på grunn av en skrivefeil, er den tredje parameter satt og antall avkorter fremfor runder.

Gulv og tak

SQL bruker "gulvet ()" funksjonen for å tvinge verdier å runde ned til nærmeste verdi, og "taket ()" funksjonen for å runde opp til nærmeste verdi. Begge disse funksjonene returnerer heltallsverdier; selv ved hjelp av en flåte datatype med en rekke desimaler som er angitt returnerer en verdi med nuller etter desimal.

Anbefalt datatyper

Den mest sannsynlige årsaken til avrunding feil i SQL stammer fra ved hjelp av en uventet datatype for den numeriske uttrykk i "ROUND ()" -funksjonen, eller fra bruk av "gulvet ()" eller "TAKET ()" og forventer å få en desimal datatype i stedet for et helt tall. Hvis SQL-funksjon er å gi deg uventede avrundings resultater, sørg for at den "CAST ()" -funksjon som angir antall har datatypen satt til "heltall", "desimal", "penger" eller "smallmoney." Den "desimal" datatype er begrenset til bare 38 sifre totalt, noe som er en begrensning som få mennesker utenfor det vitenskapelige samfunn kjøre inn.

Andre datatyper

To datatyper returnere tallverdier som kan føre til problemer med "ROUND ()" -funksjon. Dette er "ekte" og "flyte" nummertyper i SQL, som brukes til å ta opp veldig små fraksjoner som blir rundet opp av de fleste varianter av SQL på den aller siste desimal i datatype er angitt; noen SQL-implementasjoner rundt null, runde ned eller rund konvensjonelt. Når du har data som mates inn i en SQL-database som kan bruke de "ekte" eller "flyte" datatyper, bruk "CAST ()" eller "Konverter ()" funksjoner for å konvertere dem inn i "desimal" datatype.