Eu tenho a seguinte coluna especificada em um banco de dados: decimal (5,2)
Como se interpreta isso?
De acordo com as propriedades da coluna, como visualizadas no SQL Server Management studio, posso ver que isso significa: decimal (precisão numérica, escala numérica).
O que precisão e escala significam em termos reais?
Seria fácil interpretar isso como um decimal com 5 dígitos e duas casas decimais ... ou seja, 12345.12
PS: Consegui determinar a resposta correta de um colega, mas tive grande dificuldade em encontrar uma resposta on-line. Como tal, gostaria de ter a pergunta e resposta documentadas aqui no stackoverflow para referência futura.
Precisão de um número é o número de dígitos.
Escala de um número é o número de dígitos após o ponto decimal.
O que geralmente está implícito ao definir precisão e escala na definição de campo é que eles representam valores máximos .
Exemplo, um campo decimal definido com
precision=5
escale=2
permitiria os seguintes valores:123.45
(p = 5, s = 2)12.34
(p = 4, s = 2)12345
(p = 5, s = 0)123.4
(p = 4, s = 1)0
(p = 0, s = 0)Os seguintes valores não são permitidos ou causariam perda de dados:
12.345
(p = 5, s = 3) => pode ser truncado em12.35
(p = 4, s = 2)1234.56
(p = 6, s = 2) => pode ser truncado em1234.6
(p = 5, s = 1)123.456
(p = 6, s = 3) => pode ser truncado em123.46
(p = 5, s = 2)123450
(p = 6, s = 0) => fora da faixaObserve que o intervalo geralmente é definido pela precisão:
|value| < 10^p
...fonte
12345000
? Precisão 5 ou 8? Se 5, com qual escala? Escala -3?123450 (p=6,s=0)
fora de alcance? 123450 tem 6 dígitos e nenhum dígito após um ponto?123450 (p=6,s=0)
estaria fora do intervalo para um campo decimal com precisão 5 (conforme mencionado no exemplo). Como a precisão de um número que você deseja armazenar em um campo deve ser menor ou igual à precisão do campo.Precisão, escala e comprimento na documentação do SQL Server 2000:
fonte