Mam w bazie danych następującą kolumnę: dziesiętny (5,2)
Jak to interpretować?
Zgodnie z właściwościami kolumny wyświetlanymi w SQL Server Management Studio widzę, że oznacza to: dziesiętny (precyzja numeryczna, skala numeryczna).
Co dokładnie oznacza precyzja i skala?
Łatwo byłoby zinterpretować to jako miejsce dziesiętne z 5 cyframi i dwoma miejscami po przecinku ... tj. 12345.12
PS Udało mi się ustalić prawidłową odpowiedź od kolegi, ale miałem duże trudności ze znalezieniem odpowiedzi online. W związku z tym chciałbym, aby pytanie i odpowiedź zostały udokumentowane tutaj na przepełnieniu stosu do wykorzystania w przyszłości.
Precyzja liczby to liczba cyfr.
Skala liczby to liczba cyfr po przecinku.
Zasadniczo przy ustalaniu precyzji i skali w definicji pola sugeruje się, że reprezentują one wartości maksymalne .
Przykład, dziesiętne pole zdefiniowane za pomocą
precision=5
iscale=2
pozwoliłoby na następujące wartości: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)Następujące wartości są niedozwolone lub spowodowałyby utratę danych:
12.345
(p = 5, s = 3) => może zostać obcięty do12.35
(p = 4, s = 2)1234.56
(p = 6, s = 2) => może zostać obcięty do1234.6
(p = 5, s = 1)123.456
(p = 6, s = 3) => może zostać obcięty do123.46
(p = 5, s = 2)123450
(p = 6, s = 0) => poza zakresemNależy pamiętać, że zakres jest ogólnie określony przez precyzję:
|value| < 10^p
...źródło
12345000
? Precyzja 5 czy 8? Jeśli 5, z jaką skalą? Skala -3?123450 (p=6,s=0)
poza zasięgiem? 123450 ma 6 cyfr i żadnych cyfr po punkcie?123450 (p=6,s=0)
byłby poza zakresem dla pola dziesiętnego z dokładnością do 5 (jak wspomniano w przykładzie). Ponieważ dokładność liczby, którą chcesz zapisać w polu, musi być mniejsza lub równa precyzji pola.Precyzja, Skala i Długość w dokumentacji SQL Server 2000 brzmi:
źródło