Aracılığıyla paylaş


ondalık ve sayısal (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft 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;