Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Dziesiętne i liczbowe są typami danych liczbowych, które mają stałą precyzję i skalę. Dziesiętne i liczbowe są synonimami i mogą być używane zamiennie.
Arguments
Dziesiętne [ ( p [ , s ] ) ] i liczbowe [ ( p [ , s ] ) ]
Naprawiono precyzję i liczbę skalowania. Gdy jest używana maksymalna precyzja, prawidłowe wartości pochodzą od -10^38 + 1 do 10^38 - 1. Synonimy ISO dla dziesiętnych są dziesiętne i dziesiętne.
wartość liczbowa jest funkcjonalnie identyczna z dziesiętną.
p (precyzja)
Maksymalna całkowita liczba cyfr dziesiętnych do przechowywania. Ta liczba obejmuje zarówno lewą, jak i prawą stronę przecinka dziesiętnego. Precyzja musi być wartością z zakresu od 1 do maksymalnej dokładności 38. Domyślna precyzja to 18.
Note
Funkcja Informatica obsługuje tylko 16 cyfr znaczących, niezależnie od określonej dokładności i skali.
s (skala)
Liczba cyfr dziesiętnych przechowywanych po prawej stronie przecinka dziesiętnego. Ta liczba jest odejmowana od p , aby określić maksymalną liczbę cyfr z lewej strony punktu dziesiętnego. Skala musi być wartością z zakresu od 0 do p i można określić tylko wtedy, gdy określono precyzję. Domyślna skala to 0, i tak 0 <= s <= p. Maksymalne rozmiary magazynu różnią się w zależności od dokładności.
| Precision | Bajty pamięci |
|---|---|
| 1 - 9 | 5 |
| 10-19 | 9 |
| 20-28 | 13 |
| 29-38 | 17 |
Note
Informatica (połączona za pośrednictwem łącznika SQL Server PDW Informatica) obsługuje tylko 16 cyfr znaczących, niezależnie od określonej dokładności i skali.
Konwertowanie danych dziesiętnych i liczbowych
W przypadku typów danych dziesiętnych i liczbowych program SQL Server uwzględnia każdą kombinację dokładności i skali jako inny typ danych. Na przykład liczba dziesiętna (5,5) i dziesiętna (5,0) są traktowane jako różne typy danych.
W instrukcjach Transact-SQL stała z punktem dziesiętnym jest automatycznie konwertowana na wartość danych liczbowych przy użyciu minimalnej dokładności i niezbędnej skali. Na przykład stała 12.345 jest konwertowana na wartość liczbową z dokładnością 5do wartości i skali 3.
| Przekształcenie z | Przekształcenie do | Ryzyko konwersji |
|---|---|---|
| dziesiętne i liczbowe | liczba zmiennoprzecinkowa lub rzeczywista | Możliwa utrata precyzji |
| int, smallint, tinyint, float, real, money lub smallmoney | dziesiętne i liczbowe | Możliwe przepełnienie |
Domyślnie program SQL Server używa zaokrąglania podczas konwertowania liczby na wartość dziesiętną lub liczbową o mniejszej precyzji i skali. Z drugiej strony, jeśli SET ARITHABORT opcja to ON, program SQL Server zgłasza błąd podczas przepełnienia. Utrata tylko dokładności i skali nie wystarczy, aby zgłosić błąd.
Przed programem SQL Server 2016 (13.x) konwersja wartości zmiennoprzecinkowych na liczbę dziesiętną lub liczbową jest ograniczona do wartości tylko dokładności 17 cyfr. Każda wartość zmiennoprzecinkowa mniejsza niż 5E-18 (w przypadku ustawienia przy użyciu notacji naukowej lub notacji 5E-18 dziesiętnej 0.000000000000000005) zaokrągla w dół do 0. To ograniczenie nie jest wyświetlane w programie SQL Server 2016 (13.x) i nowszych wersjach.
Examples
A. Tworzenie tabeli przy użyciu typów danych dziesiętnych i liczbowych
Poniższy przykład tworzy tabelę przy użyciu typów danych dziesiętnych i liczbowych . Wartości są wstawiane do każdej kolumny. Wyniki są zwracane przy użyciu instrukcji 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;
Oto zestaw wyników.
MyDecimalColumn MyNumericColumn
---------------- ----------------
123.00 12345.12000
B. Konwertowanie liczby zmiennoprzecinkowej na liczby dziesiętne z mniejszą dokładnością i skalowaniem
W poniższym przykładzie pokazano, jak wartość zmiennoprzecinkowa jest zaokrąglona po przekonwertowaniu na liczbę dziesiętną o mniejszej precyzji i skali.
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;