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
.