Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
ondalık ve sayısal , sabit duyarlık ve ölçek içeren sayısal veri türleridir. ondalık ve sayısal eş anlamlıdır ve birbirinin yerine kullanılabilir.
Arguments
decimal [ ( p [ , s ] ) ] ve sayısal [ ( p [ , s ] ) ]
Sabit duyarlık ve ölçek sayıları. En yüksek duyarlık kullanıldığında geçerli değerler ile -10^38 + 1 arasında 10^38 - 1olur.
Ondalık için ISO eş anlamlıları dec ve dec(p,s)'tir.
sayısal , işlevsel olarak ondalıkla aynıdır.
p (hassasiyet)
Depolanacak en fazla ondalık basamak sayısı. Bu sayı ondalık ayırıcının hem sol hem de sağ kenarlarını içerir. Duyarlık, 1 ile en fazla 38 arasında bir değer olmalıdır. Varsayılan duyarlık 18'dir.
Note
Informatica, belirtilen duyarlık ve ölçek ne olursa olsun yalnızca 16 önemli basamağı destekler.
s (ölçek)
Ondalık ayırıcının sağ kısmında depolanan ondalık basamak sayısı. Bu sayı, ondalık noktasının solundaki basamak sayısı üst sınırını belirlemek için p'den çıkarılır. Ölçek, 0 ile p arasında bir değer olmalıdır ve yalnızca duyarlık belirtilirse belirtilebilir. Varsayılan ölçek , ve bu şekildedir00 <= s <= p. Maksimum depolama boyutları duyarlık temelinde farklılık gösterir.
| Precision | Depolama baytları |
|---|---|
| 1 - 9 | 5 |
| 10-19 | 9 |
| 20-28 | 13 |
| 29-38 | 17 |
Note
Informatica (SQL Server PDW Informatica Bağlayıcısı aracılığıyla bağlanır) belirtilen duyarlık ve ölçek ne olursa olsun yalnızca 16 önemli basamağı destekler.
Ondalık ve sayısal verileri dönüştürme
Ondalık ve sayısal veri türleri için SQL Server, duyarlık ve ölçeklendirmenin her birleşimini farklı bir veri türü olarak değerlendirir. Örneğin, ondalık(5,5) ve ondalık(5,0) farklı veri türleri olarak kabul edilir.
Transact-SQL deyimlerinde, ondalık noktası olan bir sabit, gereken en düşük duyarlık ve ölçek kullanılarak otomatik olarak sayısal veri değerine dönüştürülür. Örneğin, sabit12.345, duyarlık ve ölçeği 5ile 3 bir değere dönüştürülür.
| Dönüşüm | Dönüşüm | Dönüşüm riski |
|---|---|---|
| ondalık ve sayısal | float veya gerçek | Kesinlik kaybı mümkün |
| int, smallint, tinyint, float, gerçek, para veya smallmoney | ondalık ve sayısal | Olası taşma |
Varsayılan olarak, SQL Server sayıyı daha düşük bir duyarlık ve ölçekle ondalık veya sayısal değere dönüştürürken yuvarlama kullanır. Buna karşılık, seçeneği ise SET ARITHABORTON, taşma oluştuğunda SQL Server bir hata oluşturur. Yalnızca duyarlık ve ölçek kaybı hataya neden olmak için yeterli değildir.
SQL Server 2016(13.x) öncesinde , kayan değerlerin ondalık veya sayısala dönüştürülmesi yalnızca 17 basamaklı duyarlık değerleriyle sınırlıdır. değerinden küçük tüm 5E-18 değerleri (bilimsel gösterimi 5E-18 veya ondalık gösterimi 0.000000000000000005kullanılarak ayarlandığında) aşağı 0yuvarlar. Bu kısıtlama SQL Server 2016 (13.x) ve sonraki sürümlerde görünmez.
Examples
A. Ondalık ve sayısal veri türlerini kullanarak tablo oluşturma
Aşağıdaki örnek ondalık ve sayısal veri türlerini kullanarak bir tablo oluşturur. Değerler her sütuna eklenir. Sonuçlar bir SELECT deyim kullanılarak döndürülür.
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;
Sonuç kümesi aşağıdadır.
MyDecimalColumn MyNumericColumn
---------------- ----------------
123.00 12345.12000
B. Kayan değeri daha düşük bir duyarlık ve ölçekle ondalık değere dönüştürme
Aşağıdaki örnekte, daha düşük bir duyarlık ve ölçekle ondalık değere dönüştürüldüğünde kayan değerin nasıl yuvarlantığı gösterilmektedir.
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;