2013-04-05 7 views
14

मैंने वास्तव में DECIMAL (और शायद NUMERIC) के बारे में प्रश्न पूछ लिया है SQL Server 2008 R2 में टाइप करें।एसक्यूएल सर्वर दशमलव पैमाने की लंबाई - हो सकता है या होना चाहिए?

MSDN ने कहा:

(पैमाने) दशमलव अंक कि दशमलव बिंदु के दाईं करने के लिए भंडारित किया जा सकता की अधिकतम संख्या। स्केल 0 से पी के मान से होना चाहिए।

मैं इस निम्नलिखित तरीके से समझते हैं:

  • अगर मैं DECIMAL(10, 5) है - क्या मैं १२३४५.१२३४५ या 12,345,678.91 स्टोर करने के लिए कर रहा हूँ।
  • अगर मैं DECIMAL(5, 5) है - क्या मैं 12345 या 1234.5 या 1.2345, आदि हो सकता है ...

यह स्पष्ट है?

लेकिन मैं इस त्रुटि संदेश मिला:

SELECT CAST(2.8514 AS DECIMAL(5,5)) 

अंकगणित अतिप्रवाह त्रुटि डेटा प्रकार संख्यात्मक करने के लिए सांख्यिक परिवर्तित।

मैंने सोचा कि 5,5 का मतलब है कि मेरे पास 5 अंक तक हो सकते हैं और 5 तक दशमलव बिंदु के दाएं हो सकते हैं।

जैसा कि मैंने कोशिश की:

SELECT CAST(12.851 AS DECIMAL(6,5)) - overflows too 

तथापि

SELECT CAST(1.23456 AS DECIMAL(6,5)) - is OK. 

तो क्या सच है?

DECIMAL(a,b) कहता है कि मेरे पास एक अंक हो सकते हैं और उनमें से केवल बी दशमलव बिंदु के लिए सही हैं (और बाईं ओर एक-बी शेष बिंदु पर)?

मैं वास्तव में दस्तावेज़ में बयान के बारे में उलझन में हूं जो हर जगह कॉपी किया गया है। कृपया थोड़ी देर लें और मुझे यह सरल बात बताएं।

बहुत धन्यवाद!

+0

'DECIMAL (5,5)' का अर्थ है: कुल 5 अंक, जिनमें से 5 ** ** दशमलव बिंदु के बाद ** हैं - इसलिए मूल रूप से यह मान्य संख्या नहीं है ...'DECIMAL (10,5)' का अर्थ है: कुल 10 अंक, जिनमें से 5 ** ** दशमलव बिंदु के बाद (और इसलिए दशमलव बिंदु से पहले 5) भी। दशमलव बिंदु के बाद यह *** *** *** नहीं हो सकता है - यह *** *** है *** दशमलव बिंदु विनिर्देश –

+2

@marc_s मेरा मानना ​​है कि यही कारण है कि ओपी उलझन में है: [दस्तावेज़ीकरण] (http: //msdn.microsoft.com/en-us/library/ms187746.aspx) केवल "can" शब्द का उपयोग करता है, इसलिए यह वास्तव में स्पष्ट नहीं है कि दशमलव बिंदु के बाद दशमलव (5,5) 'रिजर्व' 5 अंक, चाहे आप उन्हें 'इस्तेमाल करें' या नहीं। शायद यह अधिक गणितीय रूप से इच्छुक लोगों के लिए स्पष्ट है, बेशक (मैं उन लोगों में से एक नहीं हूं)। – Pondlife

+0

@ पांडा लाइफ आप वास्तव में भ्रमित होने वाले दस्तावेज़ों के बारे में सही हैं। 2013 में, मैंने एमएसडीएन को एक बग रिपोर्ट जमा की, और उन्होंने इसे http://stackoverflow.com/questions/12207222/decimal-10-9-variable-cant-hold-the-number- में सुझाए गए शब्द में बदल दिया। 50-एसक्यूएल सर्वर 2008। –

उत्तर

19

इसके बारे में सोचने का सबसे आसान तरीका (मेरे लिए) यह है कि अंकों की कुल संख्या है, जिसमें से स्केल दशमलव बिंदु के दाईं ओर अंकों की संख्या है। तो DECIMAL(p,s) का अर्थ है p-s अंक के बाईं ओर अंक, और बिंदु के दाईं ओर s अंकों के लिए।

यह आपके द्वारा देखे जा रहे सभी रूपांतरण त्रुटियों को समझाता है: 2.8514decimal(5,5) नहीं हो सकता क्योंकि p-s = 0; 12.851decimal(6,5) नहीं हो सकता है क्योंकि p-s = 1 और इसी तरह से।

संबंधित मुद्दे