2009-04-17 41 views

Trả lời

96

Chúng giống nhau. Số là hàm số thập phân.

MSDN: decimal and numeric

+3

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

+22

@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

+14

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). –

10

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ẽ;)

+0

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

37

Đâ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>. 
+0

Bạn có liên kết cho điều này xin vui lòng? – gbn

+2

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). –

+6

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

0

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 
0

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.

Các vấn đề liên quan