В этом руководстве вы узнаете о типе данных SQL Server DECIMAL и о том, как его использовать для хранения точных числовых значений.
Обзор типа данных SQL Server DECIMAL
Для хранения чисел с фиксированной точностью и масштабом используется тип данных DECIMAL.
Ниже показан синтаксис типа данных DECIMAL:
DECIMAL(p,s)
В этом синтаксисе:
- p — точность, которая является максимальным общим числом десятичных цифр, которые будут сохранены, как слева, так и справа от десятичной точки. Точность имеет диапазон от 1 до 38. Точность по умолчанию — 38.
- s — масштаб, который представляет собой количество десятичных цифр, которые будут храниться справа от десятичной точки. Масштаб имеет диапазон от 0 до p(точность). Масштаб можно указать только если указана точность. По умолчанию масштаб равен нулю.
Максимальные размеры хранилища различаются в зависимости от точности, как показано в следующей таблице:
Точность | Хранение байтов |
---|---|
1 – 9 | 5 |
10-19 | 9 |
20-28 | 13 |
29-38 | 17 |
NUMERIC и DECIMAL являются синонимами, поэтому их можно использовать взаимозаменяемо.
Следующие объявления эквивалентны:
DECIMAL(10,2) NUMERIC(10,2)
Поскольку синонимы ISO для DECIMAL — DEC и DEC(p,s), вы можете использовать либо DECIMAL, либо DEC:
DECIMAL(10,2) DEC(10,2)
Пример DECIMAL для SQL Server
Давайте рассмотрим пример использования типов данных DECIMAL и NUMERIC.
Сначала создайте новую таблицу, состоящую из двух столбцов: одного десятичного и одного числового:
CREATE TABLE test.sql_server_decimal( dec_col DECIMAL(4, 2), num_col NUMERIC(4, 2) );
Во-вторых, вставьте новую строку в таблицу test.sql_server_decimal:
INSERT INTO test.sql_server_decimal(dec_col, num_col) VALUES (10.05, 20.05);
В-третьих, запросите данные из таблицы:
SELECT dec_col, num_col FROM test.sql_server_decimal;
В-четвертых, в следующем примере предпринимается попытка вставить новую строку в таблицу со значениями, которые превышают точность и масштаб, указанные в определении столбца:
INSERT INTO test.sql_server_decimal(dec_col, num_col) VALUES (99.999, 12.345);
SQL Server выдал ошибку и завершил выполнение оператора:
Arithmetic overflow error converting numeric to data type numeric. The statement has been terminated
В этом руководстве вы узнали, как использовать тип данных SQL Server DECIMAL для хранения точных числовых значений.