Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Conversões implícitas e arredondamento


Isso me fez ler e a resposta parece ser claramente insatisfatória, A referência SQL mais antiga que consegui encontrar (ANSI 92 disponível aqui ) na seção 4.4.1 Características dos números afirma que

O que deixa para a Microsoft qual dos dois eles escolheram implementar para o T-SQL e presumo que, por uma questão de simplicidade, eles escolheram o truncamento. Do artigo da Wikipédia sobre arredondamento parece que esta não era uma decisão incomum na época.

É interessante notar que, de acordo com a documentação que encontrei, apenas as conversões para inteiros causam truncamento, as demais causam arredondamento. Embora por algum motivo bizarro a conversão de money para integer parece contrariar a tendência, uma vez que é permitido arredondar.
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

Tabela de aqui .