2013-02-13 15 views
5

इस पर गुरु सहायता का उपयोग कर सकता है। एक टी SQL क्वेरी में समय के रूप में दो datetime मूल्यों और शो के बीच समय की गणना करने की कोशिश कर रहा ...टी-एसक्यूएल प्रारूपण गणना कॉलम समय

SELECT arrivalDate - departDate AS timeToComplete 

यह हमेशा 24 घंटे से कम होना चाहिए। लेकिन कौन जानता है कि उपयोगकर्ता वास्तव में क्या इनपुट कर सकता है?

मैं इस तरह कुछ ऐसा करने की कोशिश नहीं कर रहा हूं।

0D, 1H, 23M, 33S. 

इस पर कोई भी मार्गदर्शन के लिए धन्यवाद:

SELECT 
    CAST(time(7), 
    CONVERT(datetime, arrivalDate - departDate) AS timeToComplete) AS newTime, 
इसके बजाय एक उदाहरण के रूप 1:23:41 के रूप में परिणाम दिखाने के

, वहाँ की तरह परिणाम दिखाने के लिए एक तरीका है।

+0

आप मेरे अद्यतन उदाहरण पर भी देख सकते हैं जो चुनिंदा कथन में आपकी आवश्यकता को प्राप्त करता है। –

उत्तर

2

बस इस दृष्टिकोण का उपयोग करने के लिए विभिन्न :) प्रयास हो:

घोषित @ DATE1 datetime; @ date2 डेटाटाइम घोषित करें;

set @date1 = '2012-05-01 12:00:000' 
set @date2 = '2012-05-01 18:00:000' 


    SELECT 
    STUFF(
     STUFF(
      STUFF(
       RIGHT(CONVERT(NVARCHAR(19), CONVERT(DATETIME, DATEADD(second, DATEDIFF(S, @date1, @date2), '20000101')), 120), 11), 
       3, 1, 'D, '), 
      8, 1, 'H, '), 
     13, 1, 'M, ') + ' S'; 
+0

मुझे यकीन नहीं है कि मैं समझता हूं कि आप यहां क्या व्यक्त करने की कोशिश कर रहे हैं। सबसे पहले कई गायब कोष्ठक हैं, और मैं इसे एक चयन कथन में उपयोग करना चाहता हूं। – htm11h

+0

हो सकता है कि आपने क्वेरी की प्रतिलिपि बनाते समय गलती की हो, मैंने सफलतापूर्वक यह क्वेरी चलाई है। दुर्भाग्यवश sqlfiddle अब मेरे लिए एक्सेसिबल नहीं है और मैं आपके साथ क्वेरी साझा नहीं कर सकता। –

+0

@roman क्यों sqlfiddle आपके लिए सुलभ नहीं था? साइट के साथ कुछ भी गलत है? –

4

आप सेकंड में कुल अंतर प्राप्त कर सकते हैं और फिर उसमें से सबसे बड़ा हिस्सा लेते रहेंगे। यानी, दिन, फिर घंटों, मिनटों और सेकंड के साथ शुरू करें।

DECLARE @arrivalDate DATETIME = '2013-01-19 23:59:59' 
DECLARE @departDate DATETIME = '2013-01-25 11:52:30' 

DECLARE @SecondsDifference INT = DATEDIFF(SECOND, @arrivalDate, @departDate) 

DECLARE @DayDifference INT = @SecondsDifference/86400 
DECLARE @HourDifference INT = (@SecondsDifference - (@DayDifference * 86400))/3600 
DECLARE @MinDifference INT = (@SecondsDifference - (@DayDifference * 86400) - (@HourDifference * 3600))/60 
DECLARE @SecDifference INT = (@SecondsDifference - (@DayDifference * 86400) - (@HourDifference * 3600) - (@MinDifference * 60)) 

मैंने इसे स्पष्टता के लिए चर का उपयोग करके यहां किया है, लेकिन आप इसे एक ही क्वेरी में काम कर सकते हैं। DATEDIFF अंतर के छोटे हिस्सों के लिए काम नहीं करेगा जब तक आप बड़े लोगों को हटा नहीं देते क्योंकि आप कुल योग प्राप्त करेंगे। उदाहरण के लिए:

DATEDIFF(HOUR, @arrivalDate, @departDate) 

पूरे दिनों के घंटों तक नहीं, घंटों की कुल संख्या वापस करेगा।

+0

वाह, यह कोड करना मुश्किल हो सकता है, लेकिन मुझे लगता है कि यह शायद मेरी समस्या को सर्वोत्तम तरीके से संभालने जा रहा है। SQL डेटासॉर नियंत्रण में ऐसा करने का प्रयास कर रहा है। धन्यवाद – htm11h

+0

यह एक ऐसे फ़ंक्शन में बनाने के लिए उपयुक्त हो सकता है जो या तो पूरी तरह से स्वरूपित स्ट्रिंग (उदाहरण के लिए "0 डी, 12 एच, 30 एम, 25 एस") देता है, या इंटीजर दिन, घंटे, मिनट, सेकेंड कॉलम के साथ एक डेटासेट देता है। इस तरह आप इसे अपने डेटासोर्स में ऑनलाइन कॉल कर सकते हैं। – Bill

+0

मैंने एक समाधान के लिंक के साथ एक अद्यतन पोस्ट किया जो काफी अच्छी तरह से काम करता है। एक बार फिर धन्यवाद, – htm11h

1

अंत में मदद के लिए इस लिंक पर एक महान समाधान है, SQL - Seconds to Day, Hour, Minute, Second धन्यवाद पाया हालांकि लोगों, यह मेरे आगे इस मुद्दे में मिला है और सही जानकारी के लिए खोज।

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