Bagikan melalui


desimal dan numerik (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric

desimal dan numerik adalah jenis data numerik yang memiliki presisi dan skala tetap. desimal dan numerik adalah sinonim dan dapat digunakan secara bergantian.

Argumen

desimal [ ( p [ , s ] ] dan numerik [ ( p [ , s ] ]

Memperbaiki presisi dan angka skala. Ketika presisi maksimum digunakan, nilai yang valid berasal dari -10^38 + 1 melalui 10^38 - 1. Sinonim ISO untuk desimal adalah dec dan dec(p,s). numerik secara fungsional identik dengan desimal.

p (presisi)

Jumlah total maksimum digit desimal yang akan disimpan. Angka ini mencakup sisi kiri dan kanan titik desimal. Presisi harus berupa nilai dari 1 hingga presisi maksimum 38. Presisi default adalah 18.

Catatan

Informatica hanya mendukung 16 digit signifikan, terlepas dari presisi dan skala yang ditentukan.

s (skala)

Jumlah digit desimal yang disimpan di sebelah kanan titik desimal. Angka ini dikurangi dari p untuk menentukan jumlah maksimum digit di sebelah kiri titik desimal. Skala harus berupa nilai dari 0 hingga p, dan hanya dapat ditentukan jika presisi ditentukan. Skala defaultnya adalah 0, dan sebagainya 0 <= s <= p. Ukuran penyimpanan maksimum bervariasi, berdasarkan presisinya.

Presisi Byte penyimpanan
1 - 9 5
10-19 9
20-28 13
29-38 17

Catatan

Informatica (terhubung melalui SQL Server PDW Informatica Koneksi or) hanya mendukung 16 digit signifikan, terlepas dari presisi dan skala yang ditentukan.

Mengonversi data desimal dan numerik

Untuk jenis data desimal dan numerik , SQL Server mempertimbangkan setiap kombinasi presisi dan skala sebagai jenis data yang berbeda. Misalnya, desimal(5,5) dan desimal(5,0) dianggap sebagai jenis data yang berbeda.

Dalam pernyataan Transact-SQL, konstanta dengan titik desimal secara otomatis dikonversi menjadi nilai data numerik , menggunakan presisi minimum dan skala yang diperlukan. Misalnya, konstanta dikonversi menjadi nilai numerik, dengan presisi 5, dan skala 3.12.345

Konversi dari Konversi ke Risiko konversi
desimal dan numerik float atau real Kemungkinan hilangnya presisi
int, smallint, tinyint, float, real, money, atau smallmoney desimal dan numerik Kemungkinan luapan

Secara default, SQL Server menggunakan pembulatan saat mengonversi angka menjadi nilai desimal atau numerik dengan presisi dan skala yang lebih rendah. Sebaliknya, jika SET ARITHABORT opsinya adalah ON, SQL Server menimbulkan kesalahan ketika luapan terjadi. Hilangnya hanya presisi dan skala tidak cukup untuk memunculkan kesalahan.

Sebelum SQL Server 2016 (13.x), konversi nilai float ke desimal atau numerik dibatasi untuk nilai presisi 17 digit saja. Setiap nilai float kurang dari 5E-18 (ketika diatur menggunakan notasi 5E-18 ilmiah atau notasi 0.000000000000000005desimal ) membulatkan ke bawah ke 0. Pembatasan ini tidak muncul di SQL Server 2016 (13.x) dan versi yang lebih baru.

Contoh

Contoh berikut membuat tabel menggunakan jenis data desimal dan numerik . Nilai disisipkan ke dalam setiap kolom. Hasilnya dikembalikan dengan menggunakan SELECT pernyataan.

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;

Berikut adalah hasil yang ditetapkan.

MyDecimalColumn  MyNumericColumn
---------------- ----------------
123.00           12345.12000