SQL Server में DECIMAL और NUMERIC में कोई अंतर है?


127

SQL सर्वर में DECIMAL और NUMERIC डेटा प्रकारों के बीच कोई अंतर है?

मुझे कब DECIMAL और कब NUMERIC का उपयोग करना चाहिए?

जवाबों:


105

वह एक जैसे है। न्यूमेरिकल कार्यात्मक रूप से दशमलव के बराबर है।

MSDN: दशमलव और संख्यात्मक


4
कार्यात्मक समानता समानता के समान नहीं है। वास्तव में, MS6232A पाठ्यक्रम के प्रशिक्षक की स्लाइड्स में एक टिप्पणी है कि वे ALMOST समान हैं। उसी समय, Microsoft द्वारा एक या दूसरे के बारे में कोई सिफारिश नहीं की जाती है (हालांकि DECIMAL अधिक समझ में आता है, क्योंकि यह साइबेस से एक विरासत डेटाटाइप के बजाय एक मानक डेटाटाइप है)। फिर भी सोच रहा था कि वास्तविक अंतर (स्क्रीन के पीछे) :-) क्या है।
vstrien

22
@vstrien: फर्क सिर्फ इतना है कि मैं पा सकते हैं कि SQL-92 मानक में है decimalहै वास्तव में , के रूप में घोषित रूप में सटीक है, जबकि numericहै कम से कम के रूप में घोषित सटीक रूप में। SQL सर्वर में दोनों बिल्कुल सटीक घोषित किए गए हैं, अर्थात यह numericउस मानक के लिए लचीलेपन का उपयोग नहीं करता है ।
गुफ़ा

17
ध्यान दें, हालाँकि, SQL सर्वर उन्हें विनिमेय नहीं मानता है: यदि, उदाहरण के लिए, आपके पास "DECIMAL (18,0)" प्रारूप में "पैरेंट" कॉलम है, और आप इसके लिए एक विदेशी कुंजी जोड़ने का प्रयास करते हैं जो संदर्भ कॉलम "NUMERIC (18,0)" प्रारूप में, आपको त्रुटि मिलेगी Column '<referencedColumn>' is not the same data type as referencing column '<parentTable>.<parentColumn>' in foreign key '<yourKeyName>'। उन्हें NUMERIC (x, y), या दोनों
DECIMAL

7
@Guffa: आपका जवाब SQL2003 मानक का विरोध करता है जैसा कि stackoverflow.com/a/759606/14731 पर उद्धृत किया गया है । विशेष रूप से, decimalहै कम से कम है, जबकि, के रूप में घोषित सटीक रूप numericहै बिल्कुल के रूप में घोषित सटीक रूप में।
गिली

3
@ गिल्ली: हां, मूल सामग्री की समीक्षा पर ऐसा लगता है कि आप सही हैं कि मैंने उन्हें चारों ओर स्वैप किया।
गुफ़ा

41

यह तब 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>.

आपके पास इसके लिए लिंक है कृपया?
gbn डेसी

2
वर्टसर्प में डाउनलोड के लिए मानक का ड्राफ्ट संस्करण है ( wiscorp.com/sql_2003_standard.zip ), यदि आप चाहते हैं कि अंतिम संस्करण आपको इसे खरीदना पड़े ( en.wikipedia.org/wiki/SQL2003#socumentation_avucation )।
जोकिम बैकमैन 8

6
ध्यान दें कि यह SQL मानक है, इसका विवरण नहीं कि SQL सर्वर इसे कैसे लागू करता है।
गुफ़ा

2
यह जानकर अच्छा लगा कि माइक्रोसॉफ्ट ने एक और नियम की अनदेखी करने का फैसला किया है। :)
one.beat.consumer

11

मेरी जानकारी के लिए NUMERIC और DECIMAL डेटा प्रकारों में कोई अंतर नहीं है। वे एक दूसरे के पर्याय हैं और दोनों में से किसी एक का उपयोग किया जा सकता है। DECIMAL और NUMERIC डेटा प्रकार निश्चित सटीक और पैमाने के साथ संख्यात्मक डेटा प्रकार हैं।

संपादित करें:

कुछ आरोपों की बात करें तो शायद कुछ ऐसा है कि DECIMAL का ANSI SQL मानक है और NUMERIC एक Mircosoft पसंद किया जा रहा है क्योंकि इसकी प्रोग्रामिंग भाषाओं में अधिक पाया जाता है। ...शायद ;)


संपादन संपादित करें: नहींं - ऊपर @ JoakimBackman का उत्तर देखें - वह NUMERIC और DECIMAL दोनों के साथ SQL मानक को उद्धृत करता है।
उलट

1

वे समानार्थक शब्द हैं, कोई अंतर नहीं है। निश्चित और संख्यात्मक डेटा प्रकार निश्चित परिशुद्धता और पैमाने के साथ संख्यात्मक डेटा प्रकार हैं।

-- 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

1

जोकिम बैकमैन का जवाब विशिष्ट है, लेकिन यह इसके लिए अतिरिक्त स्पष्टता ला सकता है।

मामूली अंतर है। डमियों के लिए एसक्यूएल के अनुसार, 8 वां संस्करण (2013):

DECIMAL डेटा प्रकार NUMERIC के समान है। ... अंतर यह है कि आपका कार्यान्वयन आपके द्वारा निर्दिष्ट की तुलना में अधिक सटीक निर्दिष्ट कर सकता है - यदि हां, तो कार्यान्वयन अधिक सटीक उपयोग करता है। यदि आप सटीक या स्केल निर्दिष्ट नहीं करते हैं, तो कार्यान्वयन डिफ़ॉल्ट मानों का उपयोग करता है, जैसा कि NUMERIC प्रकार के साथ होता है।

ऐसा लगता है कि एसक्यूएल के कुछ कार्यान्वयन पर अंतर डेटा अखंडता में है। DECIMAL कुछ सिस्टम डिफॉल्ट के आधार पर परिभाषित किया गया है, जहां NUMERIC नहीं करता है, से ओवरफ्लो की अनुमति देता है।


-2

वे बिलकुल एक जैसे हैं। जब आप इसका उपयोग करते हैं तो यह सुसंगत होता है। अपने डेटाबेस में उनमें से एक का उपयोग करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.