1) select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1))
gestisce il primo caso, per gentile concessione di una risposta a una domanda simile nei forum di SQL Server
, che ho adattato e verificato rapidamente.
Nota che se i numeri stai arrotondando al 0.5
più vicino potrebbe essere più grande (ad es. 333.69
=> 333.5
), assicurati di specificare più decimal
precisione durante la trasmissione (ad es. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1))
), oppure potresti ricevere un errore di overflow:
Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.
La precisione extra non influirà sul risultato finale (ad es. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1))
e select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1))
entrambi producono 3.5
); ma è uno spreco se i numeri che stai arrotondando saranno sempre più piccoli.
Sono disponibili riferimenti online con esempi per T-SQL FLOOR
, CAST
e decimal
per aiutare.
2) select ROUND(142600, -3)
gestisce il secondo caso.
Un riferimento online simile è disponibile per T-SQL ROUND
.