Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Azure Synapse Analytics
Система платформы аналитики (PDW)
Конечная точка SQL аналитики в Microsoft Fabric
Хранилище в Microsoft Fabric
База данных SQL в Microsoft Fabric
десятичные и числовые типы данных имеют фиксированную точность и масштаб. десятичные и числовые являются синонимами и могут использоваться взаимозаменяемо.
Arguments
decimal [ ( p [ , s ] и числовые [ ( p [ , s ] ] ]
Числа с фиксированной точностью и масштабом. Если используется максимальная точность, допустимые значения находятся в -10^38 + 1 диапазоне 10^38 - 1. Синонимы ISO для десятичного разряда : dec и dec(p,s). Тип numeric функционально эквивалентен типу decimal.
p (точность)
Максимальное общее число хранимых десятичных разрядов. Это число включает символы слева и справа от десятичной запятой. Точность должна быть значением в диапазоне от 1 до максимум 38. Точность по умолчанию составляет 18.
Note
В Informatica поддерживаются только 16 значащих разрядов независимо от указанных точности и масштаба.
s (гамма)
Максимальное число хранимых десятичных разрядов справа от десятичной запятой. Это число отнимается от p для определения максимального количества цифр слева от десятичной запятой. Масштаб должен иметь значение от 0 до p и может быть указан только при заданной точности. Масштаб по умолчанию — 0и поэтому 0 <= s <= p. Максимальный размер хранилища зависит от точности.
| Precision | Байты хранения |
|---|---|
| 1–9 | 5 |
| 10-19 | 9 |
| 20-28 | 13 |
| 29-38 | 17 |
Note
В Informatica (при подключении с помощью соединителя SQL Server PDW для Informatica) поддерживаются только 16 значащих разрядов независимо от указанных точности и масштаба.
Преобразование десятичных и числовых данных
Для типов данных decimal и numeric SQL Server обрабатывает каждое сочетание точности и масштаба как отдельный тип данных. Например, значения decimal(5,5) и decimal(5,0) считаются разными типами данных.
В инструкциях Transact-SQL константа с десятичным разделителем автоматически преобразуется в значение типа numeric с минимальными необходимыми значениями точности и масштаба. Например, константа 12.345 преобразуется в числовое значение с точностью 5и масштабом 3.
| Преобразование из | Преобразование в | Риск конвертации |
|---|---|---|
| decimal и numeric | float или real | Возможная потеря точности |
| int, smallint, tinyint, float, real, money или smallmoney | decimal и numeric | Возможный переполнение |
По умолчанию SQL Server использует округление с потерей точности и масштаба при преобразовании числа в значение decimal или numeric. И наоборот, если этот SET ARITHABORT параметр установлен ON, SQL Server вызывает ошибку при возникновении переполнения. Для возникновения ошибки недостаточно только потери точности и масштаба.
До SQL Server 2016 (13.x) преобразование значений с плавающей запятой в десятичное или числовое ограничено только значениями точности 17 цифр. Любое значение с плавающей запятой меньше 5E-18 (при установке с использованием научной 5E-18 нотации или десятичной нотации 0.000000000000000005) округляется до 0. Это ограничение не отображается в SQL Server 2016 (13.x) и более поздних версиях.
Examples
A. Создание таблицы с использованием десятичных и числовых типов данных
В приведенном ниже примере создается таблица, в которой используются типы данных decimal и numeric. Значения вставляются в каждый столбец. Результаты возвращаются с помощью инструкции SELECT .
CREATE TABLE dbo.MyTable (
MyDecimalColumn DECIMAL(5, 2),
MyNumericColumn NUMERIC(10, 5)
);
GO
INSERT INTO dbo.MyTable
VALUES (123, 12345.12);
GO
SELECT MyDecimalColumn, MyNumericColumn
FROM dbo.MyTable;
Вот результирующий набор.
MyDecimalColumn MyNumericColumn
---------------- ----------------
123.00 12345.12000
B. Преобразование с плавающей запятой в десятичную с низкой точностью и масштабированием
В следующем примере показано, как значение с плавающей запятой округляется при преобразовании в десятичное значение с меньшей точностью и масштабом.
CREATE TABLE dbo.MyTable (
MyFloatColumn FLOAT,
MyDecimalColumn DECIMAL(10, 3)
);
GO
DECLARE @value FLOAT;
SELECT @value = 12345.123456789;
INSERT INTO dbo.MyTable
VALUES (@value, @value);
GO
SELECT MyFloatColumn, MyDecimalColumn
FROM dbo.MyTable;