एसक्यूएल - 2 दशमलव स्थानों पर गोलाई


222

मुझे मिनटों को घंटों में बदलने की आवश्यकता है, 2 दशमलव स्थानों पर गोल किया गया है। मुझे दशमलव बिंदु के बाद केवल 2 नंबर तक प्रदर्शित करने की आवश्यकता है। इसलिए यदि मेरे पास मिनट हैं तो 650. घंटे की अवधि 10.83 होनी चाहिए

यहाँ मेरे पास अभी तक क्या है:

Select round(Minutes/60.0,2) from ....

लेकिन इस मामले में, अगर मेरा मिनट है, तो कहना है, 630 - घंटे 10.5000000 है। लेकिन मैं इसे केवल 10.50 (राउंडिंग के बाद) चाहता हूं। मुझे यह कैसे हासिल होगा?


3
आप किस डेटाबेस इंजन का उपयोग कर रहे हैं?
7

जवाबों:


378

क्या आप अपना परिणाम नहीं दे सके numeric(x,2)? कहाँ पेx <= 38

select 
    round(630/60.0,2), 
    cast(round(630/60.0,2) as numeric(36,2))

रिटर्न

10.500000   10.50

8
अजीब। SELECT ROUND(630/60.0, 2);मुझे 10.50पहले से ही देता है ।
͢ जुलाई :54

4
जब आप पहले से ही एक कास्ट का उपयोग कर रहे हैं तो @ u07ch राउंड () का उपयोग करने का उद्देश्य क्या है?
राम

16
@ राम प्रश्न में sql सर्वर इंजन निर्दिष्ट नहीं किया गया था - यही वजह है कि मैंने अपने दम पर राउंड v कास्ट पर प्रकाश डाला। संख्यात्मक में कनवर्ट सभी इंजनों में राउंडिंग नहीं करता है, इसलिए यदि गणना की गई संख्या 10.809 थी तो आपको 10.81 के बजाय 10.80 मिलेगा जो आवश्यक प्रश्न है।
u07ch

1
@ u07ch विस्तृत उत्तर के लिए धन्यवाद। इसने मेरी मदद की।
राम

8
cast(630/60.0 as numeric(36,2))is enggth10,50
MrHIDEn

78

SQL सर्वर 2012 के साथ, आप अंतर्निहित प्रारूप फ़ंक्शन का उपयोग कर सकते हैं :

SELECT FORMAT(Minutes/60.0, 'N2')

(आगे की रीडिंग के लिए ...)


2
ध्यान दें कि यह हजारों विभाजकों को भी पेश करता है, जैसे1,757.47
8128

10
'N2' के बजाय '0.00' का उपयोग करने से दो दशमलव स्थान मिलते हैं, जिनके बिना भी हजारों विभाजक होते हैं।
8128

2
स्ट्रिंग में परिवर्तित करने के लिए लगता है? जो आदेश द्वारा शिकंजा कसता है।
ब्लिसवेब

2
@blissweb एक समस्या नहीं होनी चाहिए क्योंकि आप मूल कॉलम पर ऑर्डर कर सकते हैं, न कि फॉर्मेट फ़ंक्शन के आउटपुट के लिए।
Matten



5
CAST(QuantityLevel AS NUMERIC(18,2))

2
ढेर अतिप्रवाह में आपका स्वागत है! कोड स्निपेट के लिए धन्यवाद, जो कुछ सीमित, तत्काल सहायता प्रदान कर सकता है। एक उचित व्याख्या इस समस्या का एक अच्छा समाधान क्यों है, यह वर्णन करके अपने दीर्घकालिक मूल्य में बहुत सुधार करेगी , और भविष्य के पाठकों के लिए अन्य समान प्रश्नों के साथ इसे और अधिक उपयोगी बना देगी। कृपया कुछ स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें, जिसमें आपके द्वारा की गई धारणाएँ शामिल हैं।
sepehr



3

निम्नलिखित क्वेरी उपयोगी और सरल है-

declare @floatExchRate float;
set @floatExchRate=(select convert(decimal(10, 2), 0.2548712))
select  @floatExchRate

आउटपुट को 0.25 के रूप में देता है।


3

आप कभी भी संप्रदाय में जो प्रयोग करते हैं, वह दशमलव में होना चाहिए, उदाहरण के 1548/100लिए15.00

अगर हम बदलने के 100साथ 100.0हमारे उदाहरण में हम मिल जाएगा15.48

select 1548/100 
15.00000

select 1548/100.0
15.4800

0

3

अपनी संख्या को Numericया में बदलेंDecimal

अपनी क्वेरी को निम्न के साथ बदलें।

एस क्यू एल सर्वर

Select Convert(Numeric(38, 2), Minutes/60.0) from ....

माई एसक्यूएल:

Select Convert(Minutes/60.0, Decimal(65, 2)) from ....

Castसमारोह के लिए एक आवरण है Convertसमारोह। एसक्यूएल की व्याख्या की गई भाषा के साथ युगल और परिणाम यह है कि भले ही दो फ़ंक्शन समान परिणाम उत्पन्न करते हैं, Castफ़ंक्शन में पर्दे के पीछे थोड़ा अधिक चल रहा है। Convertफ़ंक्शन का उपयोग करना एक छोटी बचत है, लेकिन छोटी बचत कई गुना है।



2

नीचे दिए गए उत्तरों में एक ऐड-ऑन के रूप में, जब आपके फॉर्मूले में INT या गैर-दशमलव डेटाटाइप्स का उपयोग किया जाता है, तो मान को 1 से गुणा करना और आपके द्वारा पसंद किए जाने वाले दशमलव की संख्या को याद रखें।

यानी - TotalPackagesएक INTऔर इसलिए भाजक है TotalContainers, लेकिन मैं चाहता हूं कि मेरा परिणाम 6 दशमलव स्थानों तक हो।

इस प्रकार:

((m.TotalPackages * 1.000000) / m.TotalContainers) AS Packages,

1

निम्नलिखित स्निपेट आपकी मदद कर सकता है:

select SUBSTR(ENDDTTM,1, 9), extract(DAY FROM (ENDDTTM)), ENDDTTM, BEGINDTTM,  (ENDDTTM - BEGINDTTM),substr(BEGINDTTM, 1,15), substr((ENDDTTM - BEGINDTTM), 12, 8),
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 3600 + substr((ENDDTTM - BEGINDTTM), 15, 2)*60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)),2) as seconds,
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 60 + substr((ENDDTTM - BEGINDTTM), 15, 2) +  substr((ENDDTTM - BEGINDTTM), 18, 2)/60 ), 2)as minutes,
round((substr((ENDDTTM - BEGINDTTM), 12, 2) + substr((ENDDTTM - BEGINDTTM), 15, 2)/60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)/3600 ),2)  as hours

0

मुझे लगता है कि STR फ़ंक्शन इसे पूरा करने का सबसे साफ साधन है।

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