Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databá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;