тип | DECIMAL[ (p [,s] ) ] |
псевдоним | NUMERIC[ (p [,s] ) ] |
аналог в C# | decimal |
знак | - + |
диапазон | от -10^38+1 до 10^38-1 |
размер в байтах | DECIMAL(1-9) — 5 байт DECIMAL(10-19) — 9 байт DECIMAL(20-28) — 13 байт DECIMAL(29-38) — 17 байт |
p — общее количество знаков вместе с запятой
диапазон от 1 до 38
по умолчанию (DECIMAL без ничего) общее количество знаков = 18
s — количество цифр после запятой, указывается вместе с общим количеством знаков
по умолчанию, количество цифр после запятой = 0
диапазон от 1 до 38
по умолчанию (DECIMAL без ничего) общее количество знаков = 18
s — количество цифр после запятой, указывается вместе с общим количеством знаков
по умолчанию, количество цифр после запятой = 0
В этом примере, вся дробная часть будет усечена, потому что по умолчанию, количество цифр после запятой = 0
Script.sql
DECLARE @a DECIMAL = 12345.12345 PRINT @a
DECLARE @a DECIMAL = 12345.12345 PRINT @a
12345
В этом примере, вся дробная часть будет усечена, всего знаков допускается 9, целая часть числа остается неизменной
Script.sql
DECLARE @a DECIMAL(9) = 12345.12345 PRINT @a
DECLARE @a DECIMAL(9) = 12345.12345 PRINT @a
12345
В этом примере произойдет ошибка, так как произошло переполнение, допустимо всего 3 знака
Script.sql
DECLARE @a DECIMAL(3) = 12345.12345 PRINT @a
DECLARE @a DECIMAL(3) = 12345.12345 PRINT @a
Сообщение 8115, уровень 16, состояние 8, строка 1
Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric.
Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric.
В этом примере произойдет округление до трех цифр после запятой
Script.sql
DECLARE @a DECIMAL(20, 3) = 12345.12345 PRINT @a
DECLARE @a DECIMAL(20, 3) = 12345.12345 PRINT @a
12345.123