Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
decimale en numerieke gegevenstypen zijn numerieke gegevenstypen met een vaste precisie en schaal. decimale en numerieke waarden zijn synoniemen en kunnen door elkaar worden gebruikt.
Arguments
decimaal [ ( p [ , s ] ) ] en numeriek [ ( p [ , s ] ] ]
Vaste precisie en schaalnummers. Wanneer de maximale precisie wordt gebruikt, zijn geldige waarden afkomstig van -10^38 + 1 tot 10^38 - 1en met . De ISO-synoniemen voor decimalen zijn dec en dec(p,s).
numeriek is functioneel identiek aan decimaal.
p (precision)
Het maximumaantal decimalen dat moet worden opgeslagen. Dit getal bevat zowel de linker- als de rechterkant van het decimaalteken. De precisie moet een waarde van 1 tot en met de maximale precisie van 38 zijn. De standaardprecisie is 18.
Note
Informatica ondersteunt alleen 16 significante cijfers, ongeacht de opgegeven precisie en schaal.
s (scale)
Het aantal decimale cijfers dat rechts van het decimaalteken wordt opgeslagen. Dit getal wordt afgetrokken van p om het maximum aantal cijfers links van het decimaalteken te bepalen. Schaal moet een waarde van 0 tot en met p zijn en kan alleen worden opgegeven als precisie is opgegeven. De standaardschaal is 0, en dus 0 <= s <= p. De maximale opslaggrootten variëren, afhankelijk van de precisie.
| Precision | Storage bytes |
|---|---|
| 1 - 9 | 5 |
| 10-19 | 9 |
| 20-28 | 13 |
| 29-38 | 17 |
Note
Informatica (verbonden via de SQL Server PDW Informatica Connector) ondersteunt alleen 16 significante cijfers, ongeacht de opgegeven precisie en schaal.
Decimale en numerieke gegevens converteren
Voor decimale en numerieke gegevenstypen beschouwt SQL Server elke combinatie van precisie en schaal als een ander gegevenstype. Decimaal(5,5) en decimaal(5;0) worden bijvoorbeeld beschouwd als verschillende gegevenstypen.
In Transact-SQL-instructies wordt een constante met een decimaalteken automatisch geconverteerd naar een numerieke gegevenswaarde, met behulp van de minimale precisie en schaal die nodig is. De constante 12.345 wordt bijvoorbeeld geconverteerd naar een numerieke waarde, met een precisie van 5en een schaal van 3.
| Conversion from | Conversion to | Conversion risk |
|---|---|---|
| decimaal en numeriek | float of echt | Mogelijk verlies van precisie |
| int, smallint, tinyint, float, echt, geld of smallmoney | decimaal en numeriek | Possible overflow |
SQL Server maakt standaard gebruik van afronding bij het converteren van een getal naar een decimale of numerieke waarde met een lagere precisie en schaal. Als de SET ARITHABORT optie is ON, genereert SQL Server daarentegen een fout wanneer er een overloop optreedt. Verlies van alleen precisie en schaal is niet voldoende om een fout te genereren.
Vóór SQL Server 2016 (13.x) is de conversie van floatwaarden tot decimale of numerieke waarden beperkt tot alleen waarden van precisie 17 cijfers. Elke float-waarde kleiner dan 5E-18 (wanneer deze is ingesteld met behulp van de wetenschappelijke notatie van 5E-18 of de decimale notatie van 0.000000000000000005) wordt naar beneden afgerond op 0. Deze beperking wordt niet weergegeven in SQL Server 2016 (13.x) en nieuwere versies.
Examples
A. Een tabel maken met decimale en numerieke gegevenstypen
In het volgende voorbeeld wordt een tabel gemaakt met behulp van de decimale en numerieke gegevenstypen. Waarden worden in elke kolom ingevoegd. De resultaten worden geretourneerd met behulp van een SELECT instructie.
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;
Hier is het resultatenoverzicht.
MyDecimalColumn MyNumericColumn
---------------- ----------------
123.00 12345.12000
B. Float converteren naar decimalen met een lagere precisie en schaal
In het volgende voorbeeld ziet u hoe een float-waarde wordt afgerond wanneer deze wordt geconverteerd naar een decimaal met een lagere precisie en schaal.
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;