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
.