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
.