2012-11-27 6 views
11

SQL सर्वर 2005 str() में गोल करते समय कुछ फ़्लोट मानों पर अजीब व्यवहार करता है। नेट में खोज करते समय, मुझे नीचे दिए गए कोड और स्पष्टीकरण मिले।एसक्यूएल सर्वर 2005: str (4.65,5,1) = 4.7, str (3.65,5,1) = 3.6?

select STR(4.65,5,1) -- it will give 4.7 
select STR(3.65,5,1) -- it will give 3.6 

मैं कुछ स्पष्टीकरण here और here मिला, लेकिन वहाँ (कि T-SQL स्पष्टीकरण में से एक से लिया ऊपर लिंक) से कुछ भी नहीं मिला

किसी को भी कृपया समझा सकते हैं कारण है कि यह बर्ताव करता है इस तरह?

उत्तर

5

STR() का सिंटेक्स; STR (float_expression [ , length [ , decimal ] ]) स्पष्ट रूप से कहता है कि संख्या float_expression है। इसलिए जो कुछ भी आप इसे देते हैं उसे पहले FLOAT(n) में परिवर्तित कर दिया जाएगा जहां एन = 53 का डिफ़ॉल्ट मान।

तो

SELECT STR(4.65,5,1), SELECT STR(3.65,5,1) 

के बराबर:

SELECT STR(CAST(4.65 AS FLOAT(53)),5,1) , STR(CAST(3.65 AS FLOAT(53)),5,1) 

आप n निर्दिष्ट करते हैं, कहते हैं कि एन = 4 यह जवाब आप उम्मीद कर रहे हैं दे देंगे (यानी, 4.7 और 3.7)

SELECT STR(CAST(4.65 AS FLOAT(4)),5,1) , STR(CAST(3.65 AS FLOAT(4)),5,1) 
       --4.7,      3.7 
+0

अच्छी व्याख्या। धन्यवाद। –

+0

@ एम कुमरन: यदि आप इसे उत्तर के रूप में सोचते हैं, तो इसे स्वीकार करें ... –

+0

बीओएल से: "SQL सर्वर दो संभावित मानों में से एक के रूप में व्यवहार करता है। यदि 1 <= n <= 24, n को 24 के रूप में माना जाता है। यदि 25 <= n <= 53, n को 53 के रूप में माना जाता है। " एमएसएसक्यूएल में कोई फ्लोट (एन) नहीं है, यह एक उपनाम है। सब कुछ नीचे असली (सिंगल-प्रेसिजन) या फ्लोट (डबल-प्रेसिजन) है। डीबी में स्वरूपण के बजाय बेहतर (5, 1) को कास्ट करें। एसटीआर समारोह VARCHAR लौटाता है। – wqw

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

  • कोई संबंधित समस्या नहीं^_^