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
.