มีความแตกต่างระหว่างชนิดข้อมูล DECIMAL และ NUMERIC ใน SQL Server หรือไม่
ฉันควรใช้ DECIMAL เมื่อใดและ NUMERIC เมื่อใด
มีความแตกต่างระหว่างชนิดข้อมูล DECIMAL และ NUMERIC ใน SQL Server หรือไม่
ฉันควรใช้ DECIMAL เมื่อใดและ NUMERIC เมื่อใด
คำตอบ:
พวกเขาก็เหมือน ๆ กัน. ตัวเลขมีฟังก์ชันเทียบเท่ากับทศนิยม
MSDN: ทศนิยมและตัวเลข
decimal
คือว่าเป็นที่แม่นยำตามที่ประกาศในขณะที่numeric
เป็นอย่างน้อยเป็นที่แม่นยำตามที่ประกาศ ใน SQL Server ทั้งสองมีความแม่นยำตรงตามที่ประกาศกล่าวคือไม่ได้ใช้ความยืดหยุ่นnumeric
ที่มาตรฐานอนุญาต
Column '<referencedColumn>' is not the same data type as referencing column '<parentTable>.<parentColumn>' in foreign key '<yourKeyName>'
ทั้งคู่ต้องเป็น NUMERIC (x, y) หรือทั้งคู่เป็น DECIMAL (x, y)
decimal
เป็นอย่างน้อยเป็นที่แม่นยำตามที่ประกาศในขณะที่numeric
เป็นว่าเป็นที่แม่นยำตามที่ประกาศ
นี่คือสิ่งที่มาตรฐาน SQL2003 (§6.1ประเภทข้อมูล) กล่าวเกี่ยวกับสองสิ่งนี้:
<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>.
สำหรับความรู้ของฉันไม่มีความแตกต่างระหว่างประเภทข้อมูล NUMERIC และ DECIMAL มีความหมายเหมือนกันและสามารถใช้ได้อย่างใดอย่างหนึ่ง ประเภทข้อมูล DECIMAL และ NUMERIC เป็นประเภทข้อมูลตัวเลขที่มีความแม่นยำและมาตราส่วนคงที่
แก้ไข:
การพูดคุยกับเพื่อนร่วมงานบางคนอาจเกี่ยวข้องกับ DECIMAL ที่เป็นมาตรฐาน ANSI SQL และ NUMERIC ที่ Mircosoft ชอบเนื่องจากพบได้บ่อยในภาษาโปรแกรม ...อาจจะ ;)
เป็นคำพ้องความหมายไม่มีความแตกต่างกันเลยประเภทข้อมูลทศนิยมและตัวเลขเป็นข้อมูลประเภทตัวเลขที่มีความแม่นยำและมาตราส่วนคงที่
-- 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
คำตอบของ Joakim Backman นั้นเฉพาะเจาะจง แต่อาจทำให้เกิดความชัดเจนมากขึ้น
มีความแตกต่างเล็กน้อย ตาม SQL For Dummies ฉบับที่ 8 (2013):
ประเภทข้อมูล DECIMAL คล้ายกับ NUMERIC ... ความแตกต่างคือการนำไปใช้งานของคุณอาจระบุความแม่นยำมากกว่าที่คุณระบุหากเป็นเช่นนั้นการใช้งานจะใช้ความแม่นยำที่มากกว่า หากคุณไม่ได้ระบุความแม่นยำหรือมาตราส่วนการใช้งานจะใช้ค่าเริ่มต้นเช่นเดียวกับประเภท NUMERIC
ดูเหมือนว่าความแตกต่างในการใช้งาน SQL บางอย่างอยู่ที่ความสมบูรณ์ของข้อมูล DECIMAL อนุญาตให้โอเวอร์โฟลว์จากสิ่งที่กำหนดตามค่าเริ่มต้นของระบบบางอย่างโดยที่ NUMERIC ไม่ได้
พวกเขาเหมือนกันทุกประการ เมื่อคุณใช้อย่างสม่ำเสมอ ใช้หนึ่งในฐานข้อมูลของคุณ