1) select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) behandelt den ersten Fall - mit freundlicher Genehmigung einer Antwort auf eine ähnliche Frage in den SQL Server-Foren
, die ich angepasst und schnell überprüft habe.
Beachten Sie, dass Sie die Zahlen auf den nächsten 0.5 runden könnte größer sein (z.B. 333.69 => 333.5 ), achten Sie darauf, mehr decimal anzugeben Genauigkeit, wenn Sie werfen (zB select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) ), oder Sie erhalten einen Überlauffehler:
Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.
Zusätzliche Genauigkeit wirkt sich nicht auf das Endergebnis aus (d. h. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) und select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) beide ergeben 3.5 ); aber es ist verschwenderisch, wenn die zu rundenden Zahlen immer kleiner werden.
Online-Referenzen mit Beispielen sind verfügbar für T-SQL FLOOR
, CAST
, und decimal
zu helfen.
2) select ROUND(142600, -3) behandelt den zweiten Fall.
Eine ähnliche Online-Referenz ist für T-SQL ROUND
.