Sdílet prostřednictvím


desetinné a číselné (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

decimal and numeric jsou číselné datové typy, které mají pevnou přesnost a měřítko. desetinná a číselná čísla jsou synonyma a lze je použít zaměnitelně.

Arguments

decimal [ ( p [ , s ] ) and numeric [ ( p [ , s ] ) ]

Pevná přesnost a čísla měřítka. Při použití maximální přesnosti jsou platné hodnoty od -10^38 + 1 .10^38 - 1 Synonyma ISO pro desetinná místa jsou dec a dec(p;s). numeric je funkčně identický s desítkovým číslem.

p (přesnost)

Maximální celkový počet desetinných míst, které se mají uložit. Toto číslo zahrnuje levou i pravou stranu desetinné čárky. Přesnost musí být hodnota od 1 do maximální přesnosti 38. Výchozí přesnost je 18.

Note

Informatica podporuje pouze 16 platných číslic bez ohledu na zadanou přesnost a měřítko.

s (stupnice)

Počet desetinných číslic, které jsou uloženy vpravo od desetinné čárky. Toto číslo se odečte od čísla p , aby bylo možné určit maximální počet číslic vlevo od desetinné čárky. Měřítko musí být hodnota od 0 do p a lze ji zadat pouze v případě, že je zadána přesnost. Výchozí měřítko je 0, a tak 0 <= s <= p. Maximální velikosti úložiště se liší v závislosti na přesnosti.

Precision Paměťové bajty
1 - 9 5
10-19 9
20-28 13
29-38 17

Note

Informatica (připojená prostřednictvím konektoru INFORMatica SYSTÉMU SQL Server) podporuje pouze 16 platných číslic bez ohledu na zadanou přesnost a měřítko.

Převod desetinných a číselných dat

U desetinných a číselných datových typů SQL Server považuje každou kombinaci přesnosti a škálování za jiný datový typ. Například decimal(5;5) a decimal(5;0) jsou považovány za různé datové typy.

V Transact-SQL příkazech se konstanta s desetinnou čárkou automaticky převede na číselnou datovou hodnotu pomocí minimální přesnosti a potřebného měřítka. Například konstanta 12.345 je převedena na číselnou hodnotu s přesností 5a měřítkem 3.

Převedení z Přestavba na Riziko konverze
desetinná a číselná float nebo real Možná ztráta přesnosti
int, smallint, tinyint, float, real, money nebo smallmoney desetinná a číselná Možné přetečení

SQL Server ve výchozím nastavení používá zaokrouhlování při převodu čísla na desetinnou nebo číselnou hodnotu s nižší přesností a měřítkem. Naopak pokud je SET ARITHABORTtato ON možnost , SQL Server vyvolá chybu při přetečení. Ztráta pouze přesnosti a škálování nestačí k vyvolání chyby.

Před SQL Serverem 2016 (13.x) je převod hodnot float na desítkové nebo číselné hodnoty omezen pouze na hodnoty přesnosti 17 číslic. Jakákoli hodnota s plovoucí desetinnou čárkou menší než 5E-18 (při nastavení pomocí vědeckého 5E-18 zápisu nebo desetinného zápisu 0.000000000000000005) se zaokrouhlí dolů na 0hodnotu . Toto omezení se nezobrazuje v SQL Serveru 2016 (13.x) a novějších verzích.

Examples

A. Vytvoření tabulky pomocí desetinných a číselných datových typů

Následující příklad vytvoří tabulku pomocí desetinných a číselných datových typů. Hodnoty se vloží do každého sloupce. Výsledky se vrátí pomocí SELECT příkazu.

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;

Tady je soubor výsledků.

MyDecimalColumn  MyNumericColumn
---------------- ----------------
123.00           12345.12000

B. Převod plovoucí desetinné čárky na desetinné číslo s nižší přesností a měřítkem

Následující příklad ukazuje, jak se hodnota float zaokrouhlí při převodu na desetinné číslo s nižší přesností a měřítkem.

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;