1) select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) zajmuje się pierwszą sprawą — dzięki uprzejmości odpowiedź na podobne pytanie na forach dotyczących serwera SQL
, który dostosowałem i szybko sprawdziłem.
Zwróć uwagę, że jeśli liczby, które zaokrąglasz do najbliższego 0.5 może być większy (np. 333.69 => 333.5 ), pamiętaj, aby podać więcej decimal precyzja podczas rzutowania (np. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) ) lub może pojawić się błąd przepełnienia:
Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.
Dodatkowa precyzja nie wpłynie na wynik dolnego wiersza (tj. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) i select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) oba dają 3.5 ); ale to marnotrawstwo, jeśli liczby, które zaokrąglasz, będą zawsze mniejsze.
Zasoby online z przykładami są dostępne dla języka T-SQL FLOOR
, CAST
i decimal
pomóc.
2) select ROUND(142600, -3) zajmuje się drugim przypadkiem.
Podobna dokumentacja online jest dostępna dla języka T-SQL ROUND
.