sql >> Database teknologi >  >> RDS >> Sqlserver

Implicitte konverteringer og afrunding

Dette fik mig til at læse, og svaret ser ud til at være tydeligt utilfredsstillende. Den tidligste SQL-reference, jeg har været i stand til at finde (ANSI 92 tilgængelig her ) i afsnit 4.4.1 Karakteristika for tal anfører, at

Hvilket lader det være op til Microsoft, hvilken af ​​de to de valgte at implementere til T-SQL, og jeg går ud fra for nemheds skyld, at de valgte trunkering. Fra wikipedia-artiklen om afrunding det lader til, at dette ikke var en ualmindelig beslutning dengang.

Det er interessant at bemærke, at ifølge den dokumentation, jeg fandt, kun konverteringer til heltal forårsager trunkering, de andre forårsager afrunding. Selvom konverteringen fra money af en eller anden bizar grund til integer ser ud til at modvirke tendensen, da den får lov til at runde.

From     To       Behaviour

numeric  numeric  Round

numeric  int      Truncate

numeric  money    Round

money    int      Round

money    numeric  Round

float    int      Truncate

float    numeric  Round

float    datetime Round

datetime int      Round

Tabel fra her .




  1. Skift til en partition i SQL Server (T-SQL)

  2. En til en relation, der involverer flere tabeller

  3. Hurtig og beskidt til sløjfer i det umiddelbare vindue

  4. Hvorfor er min bordstørrelse mere end 4x større end forventet? (rækker*bytes/række)