1)
select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) trata do primeiro caso - cortesia de uma resposta a uma pergunta semelhante nos fóruns do SQL Server
, que adaptei e verifiquei rapidamente. Observe que, se os números que você está arredondando para o
0.5 mais próximo poderia ser maior (por exemplo, 333.69 => 333.5 ), certifique-se de especificar mais decimal precisão ao converter (por exemplo, select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) ), ou você pode receber um erro de estouro:Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.
A precisão extra não afetará o resultado final (ou seja,
select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) e select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) ambos produzem 3.5 ); mas é um desperdício se os números que você está arredondando forem sempre menores. Referências online com exemplos estão disponíveis para T-SQL
FLOOR
, CAST
e decimal
ajudar. 2)
select ROUND(142600, -3) trata do segundo caso. Uma referência online semelhante está disponível para T-SQL
ROUND
.