decimal и numeric (Transact-SQL)

Типы числовых данных с фиксированными точностью и масштабом.

  • decimal [ **(**p[ **,**s] )] и numeric[ **(**p[ **,**s] )]
    Числа с фиксированной точностью и масштабом. При использовании максимальной точности числа могут принимать значения в диапазоне от -10^38+1 до 10^38-1. Синонимами по стандарту ISO для decimal являются dec и dec(p, s). numeric функционально эквивалентно decimal.

  • p (точность)
    Максимальное количество десятичных разрядов числа (как слева, так и справа от десятичной запятой), которые будут храниться. Точность должна быть значением в диапазоне от 1 до максимум 38. Точность по умолчанию составляет 18.

  • s (масштаб)
    Максимальное количество хранимых десятичных разрядов числа справа от десятичной запятой. Это число отнимается от p для определения максимального количества цифр слева от десятичной запятой. Масштаб может принимать значение от 0 до p. Масштаб может быть указан только совместно с точностью. По умолчанию масштаб принимает значение 0; поэтому 0 <= s <= p. Максимальный размер хранилища зависит от точности.

    Точность

    Байты хранилища

    1 - 9

    5

    10-19

    9

    20-28

    13

    29-38

    17

Преобразование данных типов decimal и numeric

Для типов данных decimal и numeric SQL Server обрабатывает каждое конкретное сочетание точности и масштаба как различные типы данных. Например, значения decimal(5,5) и decimal(5,0) считаются разными типами данных.

В инструкциях Transact-SQL константа с десятичным разделителем автоматически преобразуется в значение типа данных numeric с минимально необходимой точностью и масштабом. Например, константа 12,345 преобразуется в значение numeric с точностью 5 и масштабом 3.

Преобразование типа данных decimal или numeric в тип float или real может привести к потере точности. Преобразование типов данных int, smallint, tinyint, float, real, money или smallmoney в тип decimal или numeric может вызвать переполнение.

По умолчанию SQL Server использует округление с потерей точности и масштаба при преобразовании числа в значение decimal или numeric. Однако при включенном (ON) параметре SET ARITHABORT в случае переполнения SQL Server вызывает ошибку. Для возникновения ошибки недостаточно только потери точности и масштаба.

При преобразовании значений с плавающей запятой или действительных значений в десятичное или числовое, число десятичных разрядов в десятичном значении никогда не превышает 17. Любое значение с плавающей запятой < 5E-18 преобразуется в 0.

См. также

Справочник

ALTER TABLE (Transact-SQL)

Функции CAST и CONVERT (Transact-SQL)

Инструкция CREATE TABLE (Transact-SQL)

DECLARE @local\_variable (Transact-SQL)

SET @local\_variable (Transact-SQL)

sys.types (Transact-SQL)