1) select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1))
gère le premier cas - grâce à une réponse à une question similaire sur les forums SQL Server
, que j'ai adapté et vérifié rapidement.
Notez que si les nombres que vous arrondissez au 0.5
le plus proche pourrait être plus grand (par exemple 333.69
=> 333.5
), assurez-vous de spécifier plus de decimal
précision lors de la conversion (par exemple, select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1))
), ou vous pourriez obtenir une erreur de débordement :
Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.
Une précision supplémentaire n'affectera pas le résultat final (c'est-à-dire select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1))
et select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1))
les deux donnent 3.5
); mais c'est du gaspillage si les nombres que vous arrondissez seront toujours plus petits.
Des références en ligne avec des exemples sont disponibles pour T-SQL FLOOR
, CAST
, et decimal
pour aider.
2) select ROUND(142600, -3)
gère le second cas.
Une référence en ligne similaire est disponible pour T-SQL ROUND
.