DECIMAL(M, D)
M - czyli maksymalna ilość cyfr w CAŁYM polu;
D - czyli ilość cyfr po przecinku/kropce (separatorze dziesiętnym) ;
M-D = tyle cyfr jest po lewej od separatora;
D = tyle cyfr jest po prawej od separatora;
!! M nie może być mniejsze niż D !!
Czyli jak dajesz DECIMAL(3,2) to znaczy, że możesz zapisać/wyświetlić maksymalnie taką wartość 9.99;
Przykład:
SELECT
CAST(123.456 AS DECIMAL(3,2)) AS 3cyfry_2poPrzecinku
Wynikiem będzie 9.99. Dlaczego? A no dlatego, że wartość, z której przeliczamy (123.456) jest większa, niż maks jaki jesteśmy w stanie wyświetlić i musi być zaokrąglona do góry. M = 3 czyli maksymalnie trzy cyfry, D = 2 czyli dwie po separatorze. Pierwsza cyfra jest przed kropką, a dwie kolejne za kropką.
Jedziemy dalej z przykładami:
SELECT
CAST(123.456 AS DECIMAL(5,2)) AS 5cyfr_2poPrzecinku
Maksymalna wartość dla tego zapisu to 999.99. Wynik zapytania = 123.46 - dlaczego? A no dlatego, że wartość jest mniejsza niż nasz max więc nic po lewej się nie będzie zaokrąglało, ale po prawej już tak (wszystko zgodnie z zasadami matematycznymi).
W skrócie, jeżeli chcesz wiedzieć jak poprawnie zapisać/odczytać liczbę w sql - patrzysz na największą (lub potencjalnie największą), liczysz wszystkie cyferki, które tam występują i ile cyferek jest po separatorze.
1234567890 to DECIMAL(10,0)
123456789.0 to DECIMAL(10,1)
12345678.90 to DECIMAL(10,2)
..
12.345 to DECIMAL(5,3)
1.2345 to DECIMAL(5,4)
..
12.34 to DECIMAL(4,2)
1.2 to DECIMAL(2,1)