1) select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1))
обработва първия случай - с любезното съдействие на отговор на подобен въпрос във форумите за SQL Server
, който адаптирах и бързо проверих.
Имайте предвид, че ако числата, които закръглявате до най-близкия 0.5
може да бъде по-голям (напр. 333.69
=> 333.5
), не забравяйте да посочите повече decimal
точност при кастиране (напр. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1))
), или може да получите грешка при препълване:
Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.
Допълнителната прецизност няма да повлияе на крайния резултат (т.е. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1))
и select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1))
и двете дават 3.5
); но е разточително, ако числата, които закръглявате, винаги ще бъдат по-малки.
Налични са онлайн препратки с примери за T-SQL FLOOR
, CAST
и decimal
за помощ.
2) select ROUND(142600, -3)
обработва втория случай.
Подобна онлайн справка е достъпна за T-SQL ROUND
.