1) select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1))
hanterar det första fallet - med tillstånd av ett svar på en liknande fråga på SQL Server-forum
, som jag anpassade och kollade snabbt.
Observera att om talen avrundar du till närmaste 0.5
kan vara större (t.ex. 333.69
=> 333.5
), var noga med att ange fler decimal
precision när du kastar (t.ex. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1))
), eller så kan du få ett overflow-fel:
Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.
Extra precision påverkar inte resultatet på den nedersta raden (dvs. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1))
och select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1))
båda ger 3.5
); men det är slösaktigt om siffrorna du avrundar alltid kommer att vara mindre.
Onlinereferenser med exempel finns tillgängliga för T-SQL FLOOR
, CAST
, och decimal
för att hjälpa.
2) select ROUND(142600, -3)
hanterar det andra fallet.
En liknande onlinereferens finns tillgänglig för T-SQL ROUND
.