Ho semplicemente domande sul tipo DECIMAL
(e forse NUMERIC
) in SQL Server 2008 R2.Lunghezza scala decimale di SQL Server: può essere o deve essere?
MSDN detto:
(scala) Il numero massimo di cifre decimali che è possibile archiviare a destra del punto decimale. La scala deve essere un valore compreso tra 0 e p.
capisco questo modo seguente:
- se ho
DECIMAL(10, 5)
- Sono in grado di memorizzare 12.345,12,345 mila o 12.345.678,91. - se devo
DECIMAL(5, 5)
- posso avere 12345 o 1234.5 o 1.2345, ecc ...
È chiaro?
Ma ho ottenuto questo messaggio di errore:
SELECT CAST(2.8514 AS DECIMAL(5,5))
errore di overflow aritmetico conversione numerica di tipo di dati numerico.
Ho pensato 5,5 significa che posso avere fino a 5 cifre e fino a 5 PU BE ESSERE a destra del punto decimale.
Mentre cercavo:
SELECT CAST(12.851 AS DECIMAL(6,5)) - overflows too
tuttavia
SELECT CAST(1.23456 AS DECIMAL(6,5)) - is OK.
Allora, qual è la verità?
DECIMAL(a,b)
dice che posso avere fino a un numero e JUST b di loro sono giusti al punto decimale (e lì resto a-b a sinistra al punto dec.)?
Sono davvero confuso sull'istruzione in doc che viene copiata ovunque. Per favore, prenditi un po 'e spiegami questa semplice cosa.
Molto grazie!
'DECIMALE (5,5)' significa: 5 cifre totali, 5 delle quali ** dopo ** il punto decimale, quindi in pratica non si tratta di un numero valido ...'DECIMAL (10,5)' significa: totale di 10 cifre, 5 delle quali ** dopo ** il punto decimale (e quindi 5 prima del punto decimale, anche). Non è un *** PU BE ESSERE *** dopo il punto decimale - è un *** DOPO *** la specifica del punto decimale –
@marc_s Credo che sia esattamente il motivo per cui l'OP è confuso: la [documentazione] (http: //msdn.microsoft.com/en-us/library/ms187746.aspx) usa solo la parola "can", quindi non è proprio chiaro che decimale (5,5) "riserva" 5 cifre dopo il punto decimale, sia che tu li 'uso' o meno. Forse è ovvio per le persone più inclini alla matematica, ovviamente (non sono una di quelle persone). – Pondlife
@Pondlife hai ragione a proposito della confusione della documentazione. Nel 2013, ho inviato una segnalazione di bug a MSDN e l'hanno modificata nella dicitura che ho suggerito in http://stackoverflow.com/questions/12207222/decimal-10-9-variable-cant-hold-the-number- 50-sql-server-2008. –