2009-05-22 16 views
5

में दशमलव संख्या के रूप में मिनटों और मिनटों में मिनटों को प्रारूपित करें क्या एक पूर्णांक स्वरूपण की एक साफ और सरल विधि है जो घंटों और मिनटों के दशमलव प्रतिनिधित्व में पूरी संख्या की गिनती है। यह एक बड़ी शर्म की बात है कि इस समर्थन के लिए टी-एसक्यूएल में टाइम्सपैन जैसी कोई चीज नहीं है।टी-एसक्यूएल

बस यह स्पष्ट करने के लिए कि मेरा मतलब क्या है, अगर मेरे पास 70 मिनट हैं, तो मैं इसे 1 घंटे और 10 मिनट के प्रतिनिधित्व में जोड़ना चाहता हूं यानी 1.10। मैं इसे एक वर्चर या कुछ भी रखना चाहता हूं ताकि यह सुनिश्चित किया जा सके कि पिछला शून्य रखा गया हो।

क्या वैसे भी यह SQL में कस्टम फ़ंक्शन के रूप में बनाया जा सकता है ताकि इसे विभिन्न प्रश्नों से पुन: उपयोग किया जा सके?

उत्तर

17

घंटे प्राप्त करने के लिए, आप 60 तक विभाजित करना चाहते हैं। शेष मिनट प्राप्त करने के लिए, आप या तो कुल मिनटों को 60 या कुल मिनटों और घंटे के बीच अंतर 60 लेना चाहते हैं। शेष को प्रकट करने के लिए 100.0 द्वारा दशमलव स्थान, विभाजन के अधिकार:

SELECT minutes/60 + (minutes % 60)/100.0 ... 

ध्यान दें कि आप शून्य अनुगामी और IMHO इस तरह से एक समय अवधि के भंडारण के खो देंगे एक बुरा विचार है, क्योंकि एक) आप किसी भी अधिक गणित नहीं कर सकते इसके साथ और बी) जब वे बाद में इस कोड को देखते हैं तो कोई उलझन में जा रहा है। (: फिर से करने के बजाय, सूचित करने के लिए इस एक नंबर नहीं है और मैं का उपयोग करें ''। '):

आप निम्नलिखित की तरह एक स्ट्रिंग प्रतिनिधित्व उपयोग करने के लिए बहुत से बेहतर कर रहे हैं

SELECT CAST((minutes/60) AS VARCHAR(8)) + ':' + 
     RIGHT('0' + CAST((minutes % 60) AS VARCHAR(2)), 2) ... 

जहां तक ​​कोई कस्टम फ़ंक्शन बना रहा है, आप एक संग्रहीत प्रक्रिया बना सकते हैं और फिर इसे अन्य कोड से कॉल कर सकते हैं। ध्यान दें कि संग्रहित प्रक्रिया प्रत्येक डेटाबेस में बनाई जानी चाहिए।

सुनिश्चित नहीं है कि संग्रहित प्रक्रिया को प्रयास करने के लायक है, जब तक कि आप प्रशंसक बनना न चाहें और टाइमस्पेन जैसी पंक्ति वापस न करें।

+1

बस याद रखें कि यदि आप एक पूर्णांक को विभाजित करने जा रहे हैं और उम्मीदवारों को वापस पाने की उम्मीद करते हैं, तो आपको परिणाम को उचित डेटा प्रकार में रखना चाहिए। – TheTXI

+0

@TheTXI अच्छा बिंदु –

+0

मुझे नहीं लगता कि आपको मेरा मतलब है। अगर मेरे पास 70 मिनट हैं, तो मैं इसे 1 घंटे और 10 मिनट के प्रतिनिधित्व में जोड़ना चाहता हूं यानी 1:10। मैं यह स्पष्ट करने के लिए अपना प्रश्न दोबारा दूंगा –

0

मैं थोड़ी देर के एक ही बात करने के लिए कोशिश कर रहा खर्च, यहाँ मैं कैसे यह किया:

convert(varchar, cast((RouteMileage/@average_speed) as integer))+ ':' + convert(varchar, cast((((RouteMileage/@average_speed) - cast((RouteMileage/@average_speed) as integer)) * 60) as integer)) As TravelTime, 

dateadd(n, -60 * CAST((RouteMileage/@average_speed) AS DECIMAL(7,2)), @entry_date) As DepartureTime 

उत्पादन:

DeliveryDate    TravelTime    DepartureTime 
2012-06-02 12:00:00.000  25:49   2012-06-01 10:11:00.000 
+1

आप एकाधिक, अलग-अलग प्रश्नों के लिए एक ही जवाब जोड़ रहे हैं? त्रुटि या कुछ कॉपी और पेस्ट करें? और कृपया विचार करें, अगर आप दूसरों के उत्तर में कुछ नया नहीं जोड़ते हैं, तो आपको 3 साल पुरानी पोस्ट को पुनर्जीवित करने की आवश्यकता नहीं है। हालांकि, आपके प्रयास के लिए धन्यवाद। – fancyPants

-1

एसक्यूएल सर्वर 2012 में:

SELECT format(DATEADD(minute, 70, 0), N'hh\.mm') 
संबंधित मुद्दे