2012-05-29 17 views
5

मैं वर्तमान में दो तिथियों के बीच अंतर की गणना करने के लिए एक एसक्यूएल स्क्रिप्ट काम कर रहा हूं जो मुझे डीडी: एचएच: एमआई: एसईसी प्रारूप में परिणाम देगा। उदाहरण: तिथि 1: 7/30/12 4:00 PM पर दिनांक 2: 5/4/12 10:31दिनों में एसक्यूएल में डेटडिफ की गणना करें: घंटे: न्यूनतम: सेकेंड प्रारूप

और परिणाम होना चाहिए 87: 05: 29: 00

कर सकते हैं आप कृपया इस के लिए स्क्रिप्ट के साथ मदद करते हैं? सादर, अर्जुन

+2

तुम क्या प्रयोग कर रहे हैं? एसक्यूएल-सर्वर, ओरेसेल, mysql – Arion

+0

कौन सी आरडीबीएमएस और आपने क्या प्रयास किया है? – Rahul

+0

उसके लिए 26k विचार और सोने का बैज मिला: | – OGHaza

उत्तर

9

आप एसक्यूएल सर्वर का उपयोग कर रहे हैं तो आप ऐसा कर सकते हैं:

declare @x int, 
     @dt1 smalldatetime = '1996-03-25 03:24:16', 
     @dt2 smalldatetime = getdate() 

set @x = datediff (s, @dt1, @dt2) 


SELECT convert(varchar, @x/(60 * 60 * 24)) + ':' 
+ convert(varchar, dateadd(s, @x, convert(datetime2, '0001-01-01')), 108) 

संदर्भ here

0

हाय मैं, एक ऐसी ही समस्या थी कुछ समय लगा सोचने के लिए और यहाँ है मेरी समाधान, मेरे पास उपयोगकर्ता सदस्यता के साथ तालिका है, वहां समय और समापन समय उदास है, मेरी समस्या कुछ और जटिल थी मूल रूप से यह नीचे आ गई:

SELECT subscription_id, time_open, time_closed, TIMESTAMPDIFF(DAY,time_open,time_closed) AS Day, 

HOUR(sec_to_time(TIMESTAMPDIFF(SECOND,ADDDATE(`time_open`, INTERVAL TIMESTAMPDIFF(DAY,time_open,time_closed) DAY),`time_closed`))) AS Hour, 

MINUTE(sec_to_time(TIMESTAMPDIFF(SECOND,ADDDATE(`time_open`, INTERVAL TIMESTAMPDIFF(DAY,time_open,time_closed) DAY),`time_closed`))) AS Minute, 

SECOND(sec_to_time(TIMESTAMPDIFF(SECOND,ADDDATE(`time_open`, INTERVAL TIMESTAMPDIFF(DAY,time_open,time_closed) DAY),`time_closed`))) AS Second 

FROM `user_subscription` 

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

0

ठीक है, आप अगर कुछ परिकलन करना चाहते हैं, तो आप इस रूप में अच्छी तरह कर सकता है:

DECLARE @SecsInADay INT = 60 * 60 * 24 
DECLARE @DATE1 DATETIME = CONVERT(DATETIME,'30/07/2012 16:00:00') 
DECLARE @DATE2 DATETIME = CONVERT(DATETIME,'04/05/2012 10:31:00') 
DECLARE @Days INT = DATEDIFF(DAY, @DATE2, @DATE1) 
DECLARE @DiffInSeconds INT = DATEDIFF(SECOND, @DATE2, @DATE1) 
DECLARE @TotalDaysInSeconds INT = @Days * @SecsInADay 
DECLARE @RemainingHours INT = @DiffInSeconds - @TotalDaysInSeconds 
DECLARE @Hours INT = @RemainingHours/3600 
DECLARE @Seconds INT = @RemainingHours % 3600 
DECLARE @Minutes INT = @Seconds/60 
DECLARE @RemainingSeconds INT = @Seconds % 60 

SELECT 
CASE WHEN @Days < 10 THEN '0' + CAST(@Days AS VARCHAR) ELSE CAST(@Days AS VARCHAR) END + ':' + 
CASE WHEN @Hours < 10 THEN '0' + CAST(@Hours AS VARCHAR) ELSE CAST(@Hours AS VARCHAR) END + ':' + 
CASE WHEN @Minutes < 10 THEN '0' + CAST(@Minutes AS VARCHAR) ELSE CAST(@Minutes AS VARCHAR) END + ':' + 
CASE WHEN @RemainingSeconds < 10 THEN '0' + CAST(@RemainingSeconds AS VARCHAR) ELSE CAST(@RemainingSeconds AS VARCHAR) END