Quais tipos de dados podem ser atribuídos a esse valor --> 45,58
Poderiam ser dados:
- numérico
- dinheiro
- decimal
- flutuador
Qual é a diferença então? Qual seria o melhor para usar?
Quais tipos de dados podem ser atribuídos a esse valor --> 45,58
Poderiam ser dados:
Qual é a diferença então? Qual seria o melhor para usar?
Como tudo no SQL Server, depende .
Numeric
é o mesmo queDecimal
. Eles permitem que você especifique a precisão e são bons se você tiver mais de 2 casas decimais ou precisar de mais precisão do que a indicada.Money
é usado para, você adivinhou, dinheiro. Se o seu campo for uma moeda, isso é apropriado.Float
é meio especial e NÃO é adequado para números exatos. Se você precisa representar números de ponto flutuante, este é um caminho a percorrer. Se você precisa armazenar sempre exatamente o que coloca no campo,float
é uma péssima escolha.Então, para que você quer usar o campo? O que seus dados realmente representam? Esse deve ser o fator determinante em qual tipo de dados você usa.
numeric
edecimal
são a mesma coisa. Eles armazenam valores decimais de precisão fixa. Você especifica precisão e escala (por exemplo,decimal(8,3)
especifica que o campo tem 8 dígitos decimais de largura e os últimos 3 dígitos estão à direita do ponto decimal).Money
é semelhante ao numérico/decimal, exceto que sua escala é fixa: armazena 4 casas decimais de precisão. O armazenamento de dados subjacente é, acredito, um inteiro de complemento de dois de 64 bits assinado. A vírgula está implícita.Smallmoney
é um inteiro de complemento de dois de 32 bits assinado com 4 casas decimais implícitas de precisão. Apesar do nome, dinheiro/pequeno dinheiro não são apenas para valores monetários: se você não precisa de um intervalo gigantesco ou de alta precisão, dinheiro/pequeno dinheiro são suas melhores escolhas, IMHO. O armazenamento é mais compacto do que o valor decimal/numérico equivalente.float
é ponto flutuante IEEE. Ele vem com todas as vantagens e desvantagens de todos os valores de ponto flutuante. Consulte http://en.wikipedia.org/wiki/Floating_point#Accuracy_problemsNão acredito que nenhum formato específico seja de alguma forma melhor do que outro: depende de suas necessidades e das compensações inerentes a todos eles (decimal/numérico, por exemplo, consomem relativamente muito espaço). Também não há nada que impeça você de rolar o seu próprio: você pode, por exemplo, armazenar seu
45.58
valor como um número inteiro (4558), por exemplo. Qualquer um que usasse o campo, é claro, precisaria saber que ele tem uma escala implícita de 2.