Decimal SQL: полное руководство по типу данных с фиксированной точкой

SQL-тип Decimal позволяет хранить числа с фиксированной точностью и масштабом. Он часто используется для денежных или измерительных величин.

Основы Decimal в SQL

Decimal - это тип данных в SQL, предназначенный для хранения чисел с фиксированной точностью и масштабом. Он гарантирует, что значения будут сохранены без потери точности, в отличие от типа с плавающей точкой, где возможны округления.

Определение Decimal

При объявлении столбца или переменной типа Decimal указываются два параметра:

  • Точность (precision) - максимальное количество цифр, которое может быть сохранено
  • Масштаб (scale) - максимальное количество цифр после запятой

Например, в записи DECIMAL(5, 2) точность равна 5, а масштаб - 2. Это означает, что можно сохранить число от -999.99 до 999.99.

Синтаксис объявления Decimal

Вот общий синтаксис для объявления Decimal:

DECIMAL(precision, scale)

Где:

  • precision - общее количество цифр
  • scale - количество цифр после запятой

Несколько примеров объявления Decimal с разными параметрами:

DECIMAL(10,5) - число от -99999.99999 до 99999.99999 DECIMAL(6) - число от -999999 до 999999 (scale по умолчанию 0) DECIMAL(10) - то же, что и DECIMAL(10,0)

Допустимые значения precision и scale

В разных СУБД допустимые значения precision и scale отличаются:

СУБД Макс. precision Макс. scale
SQL Server 38 precision
Oracle 38 precision
PostgreSQL 1000 126
MySQL 65 30

Как видно, PostgreSQL позволяет использовать очень большую точность, а в MySQL она ограничена.

Размер хранения данных Decimal

Для небольших значений precision размер хранения Decimal такой:

  • До 9 цифр - 4 байта
  • До 19 цифр - 8 байт
  • До 28 цифр - 12 байт
  • До 38 цифр - 16 байт

Как видим, чем выше точность, тем больше места занимает число при хранении. Поэтому важно указывать оптимальную для ваших данных точность.

Отличие DECIMAL и NUMERIC

В стандарте SQL эти типы немного отличаются:

  • DECIMAL гарантирует масштаб, а точность может быть больше указанной
  • NUMERIC гарантирует как масштаб, так и точность

На практике в большинстве СУБД DECIMAL и NUMERIC идентичны.

Преимущества Decimal

По сравнению с целыми числами и числами с плавающей точкой, Decimal имеет такие плюсы:

  • Хранит точное значение с фиксированной точностью
  • Не теряет в значимости для больших и маленьких чисел
  • Удобен для денежных, процентных и других измерительных данных

Когда использовать Decimal?

Рекомендуется применять тип Decimal в таких случаях:

  1. Для хранения денежных или финансовых величин
  2. В измерительных или статистических данных, где важна точность
  3. Если нужно выполнять вычисления с фиксированной точностью
  4. Когда нельзя использовать приблизительные числа с плавающей точкой

Вместо Decimal лучше применять целые числа, когда нет необходимости в десятичных знаках и значения не очень велики. А для больших приблизительных значений подойдут числа с плавающей точкой.

Работа с Decimal в SQL

Рассмотрим основные операции при работе с данными типа Decimal в SQL на примерах.

Вставка данных в столбец Decimal

При вставке значений в столбец Decimal следует учитывать объявленную для него точность и масштаб. Например, для столбца DECIMAL(5,2):

INSERT INTO table (decimal_col) VALUES (123.45); -- OK INSERT INTO table (decimal_col) VALUES (1234.56); -- Ошибка

Вторая команда вызовет ошибку, поскольку число 1234.56 превышает объявленную точность в 5 цифр.

Преобразование типов

Значения других типов можно явно привести к Decimal. Например:

SELECT CAST(float_col AS DECIMAL(10,2)) FROM table; SELECT CONVERT(DECIMAL(10,2), int_col) FROM table;

CAST и CONVERT выполнят конвертацию в Decimal с нужной точностью и масштабом.

Округление десятичных знаков

Если при вставке указать число с большим масштабом, чем разрешено, произойдет округление:

INSERT INTO table (decimal_col) VALUES (123.456);

Для DECIMAL(5,2) будет вставлено значение 123.46.

Сравнение Decimal

"decimal sql" можно сравнивать как с Decimal, так и другими числовыми типами:

SELECT * FROM table WHERE decimal_col > int_col SELECT * FROM table WHERE decimal_col = float_col

Сравнение выполняется по числовому значению после неявного приведения типов.

Применение Decimal

Рассмотрим использование типа данных SQL Decimal в различных ситуациях.

Хранение денежных сумм

"sql тип decimal" часто используется для представления денежных величин - зарплат, бюджетов, курсов валют. Гарантированная точность позволяет избежать ошибок округления.

Например, для хранения бюджетов подразделений можно использовать поле:

department_budget DECIMAL(11,2)

Это позволит хранить суммы от -99999.99 до 99999.99 с точностью до копеек.

Измерения и статистика

Для хранения результатов измерений Decimal подходит лучше float, так как имеет фиксированную точность. Например, учет показаний датчиков:

sensor_temperature DECIMAL(5,2)

Погрешность будет не более 0.01 градуса. А для статистики часто используют вот такие столбцы:

conversion_rate DECIMAL(5,4) mean_transaction_size DECIMAL(8,2)

Это позволяет более точно хранить процентные и измерительные данные.

Комментарии