टी-एसक्यूएल का उपयोग करके दो पूर्णांक मानों को विभाजित करके एक फ्लोट परिणाम कैसे प्राप्त करें?


173

जब मैं 2 पूर्णांक संख्याओं के बीच विभाजन करता हूं, तो टी-एसक्यूएल और माइक्रोसॉफ्ट एसक्यूएल सर्वर का उपयोग करके मैं दशमलव अंकों की संख्या निर्दिष्ट करना चाहूंगा:

select 1/3

वह वर्तमान में लौटता है 0 । मैं चाहूंगा कि यह वापसी करे 0,33

कुछ इस तरह:

select round(1/3, -2)

लेकिन वह काम नहीं करता है। मैं वांछित परिणाम कैसे प्राप्त कर सकता हूं?


3
क्या आपने 1.0 / 3 की कोशिश की है?
थिलो

मुझे जो उत्तर मिले वे पर्याप्त से अधिक हैं
लाब्राका

जवाबों:


277

यदि आप स्थिरांक की तलाश कर रहे हैं तो stb और xiowl के सुझाव ठीक हैं। यदि आपको मौजूदा फ़ील्ड या पैरामीटर का उपयोग करने की आवश्यकता है जो पूर्णांक हैं, तो आप उन्हें पहले फ़्लोट करने के लिए डाल सकते हैं:

SELECT CAST(1 AS float) / CAST(3 AS float)

या

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)

या आप उन्हें दशमलव के रूप में डाल सकते हैं, यदि आप एक दशमलव परिणाम चाहते हैं।
टिम

30
सेलेक्ट 1.0 * MyInt1 / MyInt2
ट्रोग्लो

@TroubleZero MySQL उपयोग के लिएdecimal
itsazzad

बहुत बहुत धन्यवाद, आपने मेरा दिन बचाया। मुझे कास्ट (7/3 AS फ्लोट) की कोशिश की गई थी, लेकिन 2 फिर से लौट आए। इसलिए कास्ट नंबरों से मेरी समस्या हल हो गई।
यासीन हॉकी

3
डिविडेंड और डिविज़र दोनों को डालने की ज़रूरत नहीं, @MS का जवाब stackoverflow.com/a/30639343/2866644 देखें
रोबॉटिक

70

क्योंकि SQL सर्वर पूर्णांक विभाजन करता है। इसे इस्तेमाल करे:

select 1 * 1.0 / 3

जब आप पूर्णांक के रूप में पूर्णांक पास करते हैं तो यह सहायक होता है।

select x * 1.0 / y

1
तुम भी बाहर शून्य छोड़ सकते हैं।
जॉन



13

मैं समझता हूँ कि MySQL में CASTing FLOATकी अनुमति नहीं है और जब आप MySQL देवCAST(1 AS float) में बताए गए प्रयास करते हैं तो एक त्रुटि होगी

इसके लिए समाधान एक सरल है। बस करो

(1 + 0.0)

फिर ROUNDदशमलव स्थानों की एक विशिष्ट संख्या को प्राप्त करने के लिए उपयोग करें

ROUND((1+0.0)/(2+0.0), 3)

उपरोक्त एसक्यूएल 1 को 2 से विभाजित करता है और 3 दशमलव स्थानों पर एक फ्लोट देता है, जैसा कि इसमें होगा 0.500

एक कर सकते हैं CAST: निम्न प्रकार के बाइनरी, चार, तिथि, दिनांक, दशमलव, json, nchar, पर हस्ताक्षर किए, समय, और अहस्ताक्षरित


3
MySQL अनुमति देता है CAST, यह सिर्फ कास्टिंग की अनुमति नहीं देता है FLOATDECIMALइसके बजाय कास्ट करें । उदाहरण के लिए देखें stackoverflow.com/questions/7368163/…
मार्कस

7

ऐसा लगता है कि यह चाल SQL सर्वर में काम करती है और छोटी है (पिछले उत्तरों में आधारित)

SELECT 1.0*MyInt1/MyInt2

या:

SELECT (1.0*MyInt1)/MyInt2

2
मुझे यह सबसे ज्यादा पसंद है, यह प्रतिशत गणना के लिए भी अच्छा लगता है:SELECT 100.0 * @Elapsed / @Total
एलीशेर

3

इसे इस्तेमाल करो

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

यहाँ पर यह sql पहले फ्लोट में बदल जाता है या 1.00 से गुणा करता है। जो आउटपुट फ्लोट नंबर होगा। मैं 2 स्थानों पर विचार करता हूँ। आप चुन सकते हैं कि आपको क्या चाहिए।


2

यदि आप पूर्णांक मान के लिए समाधान खोजने के लिए यहां (मेरे जैसे) आए हैं , तो यहां उत्तर है:

CAST(9/2 AS UNSIGNED)

रिटर्न ५

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