Có sự khác biệt nào giữa các kiểu dữ liệu DECIMAL và NUMERIC trong SQL Server không?Có sự khác biệt nào giữa DECIMAL và NUMERIC trong SQL Server không?
Khi nào tôi nên sử dụng DECIMAL và khi NUMERIC?
Có sự khác biệt nào giữa các kiểu dữ liệu DECIMAL và NUMERIC trong SQL Server không?Có sự khác biệt nào giữa DECIMAL và NUMERIC trong SQL Server không?
Khi nào tôi nên sử dụng DECIMAL và khi NUMERIC?
Chúng giống nhau. Số là hàm số thập phân.
MSDN: decimal and numeric
Theo hiểu biết của tôi ở đó có sự khác biệt giữa các kiểu dữ liệu NUMERIC và thập phân. Chúng đồng nghĩa với nhau và có thể được sử dụng. Các kiểu dữ liệu DECIMAL và NUMERIC là các kiểu dữ liệu số với độ chính xác và tỷ lệ cố định.
Edit:
Phát biểu với một vài đồng nghiệp có lẽ nó có cái gì để làm với thập phân là tiêu chuẩn ANSI SQL và NUMERIC là một Mircosoft thích như nó thường được tìm thấy trong các ngôn ngữ lập trình. ... Có lẽ;)
Chỉnh sửa lại: Không - xem câu trả lời của @ JoakimBackman ở trên - anh ấy trích dẫn chuẩn SQL với cả NUMERIC và DECIMAL. – DaveBoltman
Đây là những gì sau đó chuẩn SQL2003 (§6.1 Các loại dữ liệu) nói về hai:
<exact numeric type> ::=
NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
| DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
| DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
| SMALLINT
| INTEGER
| INT
| BIGINT
...
21) NUMERIC specifies the data type
exact numeric, with the decimal
precision and scale specified by the
<precision> and <scale>.
22) DECIMAL specifies the data type
exact numeric, with the decimal scale
specified by the <scale> and the
implementation-defined decimal
precision equal to or greater than the
value of the specified <precision>.
Bạn có liên kết cho điều này xin vui lòng? – gbn
Wiscorp có phiên bản dự thảo của tiêu chuẩn để tải xuống (http://www.wiscorp.com/sql_2003_standard.zip), nếu bạn muốn phiên bản cuối cùng bạn phải mua (http://en.wikipedia.org/wiki)/SQL2003 # Documentation_availability). –
Lưu ý rằng đây là tiêu chuẩn SQL, không phải là một mô tả về cách SQL Server thực hiện nó. – Guffa
Họ là những từ đồng nghĩa, không có sự khác biệt ở all.Decimal và các kiểu dữ liệu Numeric là số loại dữ liệu có độ chính xác và tỷ lệ cố định.
-- Initialize a variable, give it a data type and an initial value
declare @myvar as decimal(18,8) or numeric(18,8)----- 9 bytes needed
-- Increse that the vaue by 1
set @myvar = 123456.7
--Retrieve that value
select @myvar as myVariable
Câu trả lời của Joakim Backman là cụ thể, nhưng điều này có thể mang lại sự rõ ràng hơn cho nó.
Có một sự khác biệt nhỏ. Theo câu lệnh SQL For Dummies, ấn bản lần thứ 8 (2013):
Loại dữ liệu DECIMAL tương tự như NUMERIC. ... Sự khác biệt là rằng việc triển khai của bạn có thể chỉ định độ chính xác lớn hơn mức bạn chỉ định - nếu vậy, việc triển khai sử dụng độ chính xác cao hơn. Nếu bạn không chỉ định độ chính xác hoặc tỷ lệ, việc triển khai sẽ sử dụng giá trị mặc định , giống như với loại NUMERIC.
Dường như sự khác biệt trên một số triển khai SQL là toàn vẹn dữ liệu. DECIMAL cho phép tràn từ những gì được xác định dựa trên một số giá trị mặc định của hệ thống, trong đó NUMERIC thì không.
Tương đương về chức năng không giống như bình đẳng. Trên thực tế, trong các slide của người hướng dẫn về khóa học MS6232A, có một chú thích được thêm rằng chúng là ALMOST giống nhau. Đồng thời, không có khuyến nghị nào được thực hiện bởi Microsoft liên quan đến cái này hay cái khác (tuy nhiên DECIMAL có ý nghĩa hơn, vì nó là kiểu dữ liệu của một tiêu chuẩn thay vì một kiểu dữ liệu kế thừa từ Sybase). Vẫn tự hỏi sự khác biệt thực sự (đằng sau màn hình) là :-). – vstrien
@vstrien: Sự khác biệt duy nhất mà tôi có thể tìm thấy là trong chuẩn SQL-92 'decimal' là * chính xác * chính xác như được khai báo, trong khi' số' là * ít nhất * chính xác như được khai báo. Trong SQL Server, cả hai đều chính xác như được khai báo, nghĩa là nó không sử dụng tính linh hoạt cho 'số' mà chuẩn cho phép. – Guffa
LƯU Ý, tuy nhiên, SQL Server không coi chúng là có thể hoán đổi cho nhau: ví dụ: bạn có cột "cha mẹ" ở định dạng "DECIMAL (18,0)" và bạn cố gắng thêm ** khóa ngoại ** đối với nó tham chiếu cột trong định dạng "NUMERIC (18,0)", bạn sẽ nhận được lỗi 'Cột '' không phải là kiểu dữ liệu giống như tham chiếu cột '. ' trong khóa ngoài ' Họ phải có cả hai là NUMERIC (x, y), hoặc cả hai đều là DECIMAL (x, y). –