sql >> Database teknologi >  >> RDS >> Sqlserver

Afrunding af decimaltal i SQL Server 2008

1) select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) håndterer den første sag - med tilladelse fra et svar på et lignende spørgsmål på SQL Server-fora , som jeg tilpassede og hurtigt tjekkede.

Bemærk, at hvis tallene afrundes til nærmeste 0.5 kunne være større (f.eks. 333.69 => 333.5 ), skal du sørge for at angive mere decimal præcision, når du kaster (f.eks. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) ), eller du kan få en overløbsfejl:

Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.

Ekstra præcision vil ikke påvirke bundlinjeresultatet (dvs. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) og select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) begge giver 3.5 ); men det er spild, hvis de tal, du afrunder, altid vil være mindre.

Onlinereferencer med eksempler er tilgængelige for T-SQL FLOOR , CAST , og decimal at hjælpe.

2) select ROUND(142600, -3) håndterer den anden sag.

En lignende onlinereference er tilgængelig for T-SQL ROUND .



  1. Hvad er den rigtige måde at udfylde en DropDownList fra en database på?

  2. Dense_rank første Oracle til Postgresql konverter

  3. Indstilling af standardværdien for kolonnen DATO til den aktuelle dato uden tidsdel?

  4. MySQL indstille AUTO_INCREMENT værdi til MAX(id) + 1 genvej?