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
.