desimal dan numerik (Transact-SQL)

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics Analytics yesPlatform System (PDW)

Jenis data numerik yang memiliki presisi dan skala tetap. Desimal dan numerik adalah sinonim dan dapat digunakan secara bergantian.

Argumen

decimal[ (p[ ,s] )] dan numerik[ (p[ ,s] )]
Memperbaiki presisi dan menskalakan angka. Ketika presisi maksimum digunakan, nilai yang valid meliputi - 10^38 +1 hingga 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 jadi 0 <= s<= p. Ukuran penyimpanan maksimum bervariasi, berdasarkan presisi.

Presisi byte Storage
1 - 9 5
10-19 9
20-28 13
29-38 17

Catatan

Informatica (terhubung melalui konektor SQL Server PDW Informatica) 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 12,345 dikonversi menjadi nilai numerik dengan presisi 5 dan skala 3.

Mengonversi dari desimal atau numerik ke float atau nyata dapat menyebabkan hilangnya presisi. Mengonversi dari int, smallint, tinyint, float, real, money, atau smallmoney menjadi desimal atau numerik dapat menyebabkan luapan.

Secara default, SQL Server menggunakan pembulatan saat mengonversi angka menjadi nilai desimal atau numerik dengan presisi dan skala yang lebih rendah. Sebaliknya, jika opsi SET ARITHABORT AKTIF, SQL Server menimbulkan kesalahan saat 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 hanya untuk nilai presisi 17 digit. Setiap nilai float kurang dari 5E-18 (ketika diatur menggunakan notasi ilmiah 5E-18 atau notasi desimal 0,00000000000000000000000000000000000000) membulatkan ke bawah ke 0. Ini tidak lagi menjadi batasan pada SQL Server 2016 (13.x).

Contoh

Contoh berikut membuat tabel menggunakan jenis data desimal dan numerik . Nilai disisipkan ke dalam setiap kolom. Hasilnya dikembalikan dengan menggunakan pernyataan 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;  
  

Berikut adalah hasil yang ditetapkan.

MyDecimalColumn                         MyNumericColumn  
--------------------------------------- ---------------------------------------  
123.00                                  12345.12000  
  
(1 row(s) affected)  
  

Lihat juga

ALTER TABLE (Transact-SQL)
CAST dan CONVERT (SQL Transact)
BUAT TABEL (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.type (Transact-SQL)