sql >> Databasteknik >  >> RDS >> Sqlserver

Avrundning nedåt decimaltal i SQL Server 2008

1) select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) hanterar det första fallet - med tillstånd av ett svar på en liknande fråga på SQL Server-forum , som jag anpassade och kollade snabbt.

Observera att om talen avrundar du till närmaste 0.5 kan vara större (t.ex. 333.69 => 333.5 ), var noga med att ange fler decimal precision när du kastar (t.ex. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) ), eller så kan du få ett overflow-fel:

Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.

Extra precision påverkar inte resultatet på den nedersta raden (dvs. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) och select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) båda ger 3.5 ); men det är slösaktigt om siffrorna du avrundar alltid kommer att vara mindre.

Onlinereferenser med exempel finns tillgängliga för T-SQL FLOOR , CAST , och decimal för att hjälpa.

2) select ROUND(142600, -3) hanterar det andra fallet.

En liknande onlinereferens finns tillgänglig för T-SQL ROUND .



  1. SQL Ordna efter sträng, siffror visas sist

  2. Oracle SQL - Generera och uppdatera en kolumn med olika slumptal i varje rad

  3. Ersätt REGEXP_SUBSTR i SQL Server

  4. MySQL där kolumn ='x, y, z'