SQL सर्वर में दशमलव मान कैसे संग्रहीत करें?


272

मैं SQL सर्वर में एक स्तंभ के दशमलव डेटा प्रकार का पता लगाने की कोशिश कर रहा हूं। मुझे 15.5, 26.9, 24.7, 9.8, आदि जैसे मूल्यों को संग्रहीत करने में सक्षम होना चाहिए

मैंने decimal(18, 0)कॉलम डेटा प्रकार को सौंपा , लेकिन इससे मुझे इन मूल्यों को संग्रहीत करने की अनुमति नहीं मिली।

ऐसा करने का सही तरीका क्या है?

जवाबों:


513

DECIMAL(18,0) दशमलव बिंदु के बाद 0 अंक की अनुमति देगा।

DECIMAL(18,4)इसके बजाय कुछ का उपयोग करें जो सिर्फ ठीक करना चाहिए!

यह आपको कुल 18 अंक देता है , जिनमें से 4 दशमलव बिंदु के बाद (और दशमलव बिंदु से पहले 14)।


@marc_s, वैसे भी "4.5" मान को संग्रहीत करने के लिए है जहां कॉलम डेटाटाइप दशमलव (4,2) है? जब मैं मूल्य सम्मिलित करता हूं, तो यह संशोधित होकर "4.50" हो जाता है
अरुण

1
@ArunkumarTK: decimal(4,2)दशमलव बिंदु के बाद 2 अंकों से पहले और 2 अंकों की अनुमति देता है। "4.5" को कोई समस्या संग्रहीत नहीं किया जा सकता है - और संख्यात्मक रूप से, "4.5" और "4.50" समान हैं
marc_s

3
@ArunkumarTK: उन अलग क्यों होना चाहिए ?? दोनों "साढ़े चार" हैं - मान समान है । और कोईvarchar दशमलव मूल्य को स्टोर करने के लिए उपयोग नहीं करता है !!
marc_s

1
मुझे पता है कि यह एक पुरानी चर्चा है, लेकिन उस मामले में '4.05' और '4.5' नहीं होगा।
शेल्बी ११५

2
जब 18 और 19 दोनों बाइट्स का उपयोग करते हैं , तो 18 इतना लोकप्रिय क्यों है (जैसे डिफ़ॉल्ट (18,0)) ?
xr280xr

136

आपको निम्नानुसार उपयोग करना चाहिए:

DECIMAL(m,a)

m आपके दशमलव में कुल अंकों की संख्या हो सकती है।

a दशमलव बिंदु के बाद आपके पास जितने अंक हो सकते हैं।

http://www.tsqltutorials.com/datatypes.php में सभी डेटाटिप्स के लिए विवरण हैं।


3
इसे आमतौर पर DECIMAL (p, s) के रूप में निरूपित किया जाता है, जहाँ p सटीक (किसी संख्या में अधिकतम अनुमत अंक) और s स्केल के लिए खड़ा होता है (दशमलव बिंदु के बाद अधिकतम अनुमत अंक)।
आरबीटी

लिंक मृत है
इब्राहिम माहिर

43

इसके लिए सेटिंग्स Decimalइसकी सटीकता और पैमाने हैं या सामान्य भाषा में, किसी संख्या में कितने अंक हो सकते हैं और आप दशमलव बिंदु के दाईं ओर कितने अंक चाहते हैं।

तो अगर आप डाल PIएक में Decimal(18,0)यह के रूप में दर्ज किया जाएगा 3?

यदि आप डाल PIएक में Decimal(18,2)यह के रूप में दर्ज किया जाएगा 3.14?

यदि आप के रूप में दर्ज PIकिया Decimal(18,10)जाएगा 3.1415926535


35

अधिकांश समय के लिए, मैं दशमलव (9,2) का उपयोग करता हूं जो कि sql दशमलव प्रकार में सबसे कम भंडारण (5 बाइट्स) लेता है।


परिशुद्धता => भंडारण बाइट्स

  • 1 - 9 => 5
  • 10-19 => 9
  • 20-28 => 13
  • 29-38 => 17

यह 0 से 9 999 तक 999.99 (7 ​​अंकों का अंतर + 2 अंक दशमलव बिंदु = कुल 9 अंकों के पीछे) स्टोर कर सकता है, जो कि अधिकांश मूल्यों के लिए पर्याप्त है।


9

आप यह कोशिश कर सकते हैं

decimal(18,1)

संख्याओं की लंबाई पूरी तरह से 18 होनी चाहिए। दशमलव बिंदु के बाद संख्याओं की लंबाई केवल 1 होनी चाहिए और इससे अधिक नहीं।


6

MySQL DB decimal(4,2)में कुल 4 अंकों में प्रवेश करने की अनुमति देता है। जैसा कि आप देख रहे हैं decimal(4,2), इसका मतलब है कि आप कुल 4 अंक दर्ज कर सकते हैं जिसमें से दो अंक दशमलव बिंदु के बाद रखने के लिए हैं।

इसलिए, यदि आप MySQL डेटाबेस में 100.0 दर्ज करते हैं, तो यह "आउट ऑफ रेंज वैल्यू फॉर कॉलम" जैसी त्रुटि दिखाएगा।

तो, आप केवल इस श्रेणी में प्रवेश कर सकते हैं: 00.00 से 99.99 तक।


2
यह क्यों प्रासंगिक है, जबकि प्रश्न स्पष्ट रूप से Microsoft SQL सर्वर निर्दिष्ट करता है?
JCKödel

3

अन्य उत्तर सही हैं। अपने उदाहरणों को मानते हुए कि आप क्या चाहते हैं, संभावनाओं की पूरी श्रृंखला को दर्शाते हैं DECIMAL(3, 1)। या, DECIMAL(14, 1)कुल 14 अंकों की अनुमति देगा। यह सोचना आपका काम है कि क्या पर्याप्त है।


1
request.input("name", sql.Decimal, 155.33)              // decimal(18, 0)
request.input("name", sql.Decimal(10), 155.33)          // decimal(10, 0)
request.input("name", sql.Decimal(10, 2), 155.33)       // decimal(10, 2)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.