मेरे पास एक SQL सर्वर तालिका है जिसमें "टाइम" कॉलम है। तालिका एक संदेश तालिका है जो प्रत्येक संदेश के लिए घर की स्थिति संदेश और टाइमस्टैम्प है। लॉग तालिका को बैच फ़ाइल के माध्यम से डाला जाता है। एक आईडी कॉलम है जो समूह पंक्तियों को एकसाथ करता है। प्रत्येक बार जब बैच फ़ाइल चलता है तो यह आईडी को प्रारंभ करता है और रिकॉर्ड लिखता है। मुझे क्या करना है आईडी आईडी में पहले रिकॉर्ड से एक ही आईडी सेट के अंतिम रिकॉर्ड में विलुप्त समय प्राप्त करना है। मैंने लॉगटेबल से चुनिंदा मैक्स (टाइम) - न्यूनतम (समय) के साथ टॉयइंग करना शुरू किया जहां आईडी = लेकिन यह सही ढंग से प्रारूपित करने का तरीका नहीं समझ सका। मुझे एचएच में इसकी जरूरत है: एमएम: एसएस।एसक्यूएल सर्वर - एचएच में दो डेटाटाइम टिकटों के बीच विलुप्त समय की गणना करें: एमएम: एसएस प्रारूप
उत्तर
SQL सर्वर SQL मानक अंतराल डेटा प्रकार का समर्थन नहीं करता है। आपकी सबसे अच्छी शर्त सेकेंड में अंतर की गणना करना है, और परिणाम स्वरूपित करने के लिए फ़ंक्शन का उपयोग करना है। मूल कार्य CONVERT() ठीक काम करने के लिए प्रतीत होता है जब तक आपका अंतराल 24 घंटे से कम हो। लेकिन CONVERT() इसके लिए एक अच्छा समाधान नहीं है।
create table test (
id integer not null,
ts datetime not null
);
insert into test values (1, '2012-01-01 08:00');
insert into test values (1, '2012-01-01 09:00');
insert into test values (1, '2012-01-01 08:30');
insert into test values (2, '2012-01-01 08:30');
insert into test values (2, '2012-01-01 10:30');
insert into test values (2, '2012-01-01 09:00');
insert into test values (3, '2012-01-01 09:00');
insert into test values (3, '2012-01-02 12:00');
मान इस तरह से कि के लिए
- आईडी = 1, बीता हुआ समय 1 घंटे
- आईडी = 2, बीता हुआ समय 2 घंटे है में चुने गए हैं, और
- आईडी = 3, विलुप्त समय 3 घंटे है।
यह चयन विवरण में एक कॉलम शामिल है जो सेकेंड की गणना करता है, और एक जो कन्वर्ट() को घटाव के साथ उपयोग करता है।
select t.id,
min(ts) start_time,
max(ts) end_time,
datediff(second, min(ts),max(ts)) elapsed_sec,
convert(varchar, max(ts) - min(ts), 108) do_not_use
from test t
group by t.id;
ID START_TIME END_TIME ELAPSED_SEC DO_NOT_USE
1 January, 01 2012 08:00:00 January, 01 2012 09:00:00 3600 01:00:00
2 January, 01 2012 08:30:00 January, 01 2012 10:30:00 7200 02:00:00
3 January, 01 2012 09:00:00 January, 02 2012 12:00:00 97200 03:00:00
नोट भ्रामक "03:00:00" 27 घंटे का अंतर के लिए आईडी नंबर 3.
@Catcall .... प्रश्न: आपकी क्वेरी इन दो तिथियों के लिए काम करती है जो दो दिनों में फैली हुई है (2012-12-13 15: 10: 12.050 और 2012-12-12 20: 16: 47.160)। आपके परिणाम 68005 सेकंड और 18:53:24 थे। यह सही प्रतीत होता है। यकीन नहीं है क्यों do_not_use 18:53:24 क्यों है? – MikeTWebb
CONVERT() 24 घंटे से अधिक अंतराल के लिए गलत जवाब देता है। आपके दो टाइमस्टैम्प के बीच का अंतर 24 घंटे से कम है। "Do_not_use" कॉलम अंतराल प्रारूपित करने के लिए CONVERT() का उपयोग करने से आपको हतोत्साहित करने के लिए है। –
@Catcall ... हाँ, मैं "do_not_use" कॉलम का अर्थ समझ गया। मैं CONVERT() के बारे में उत्सुक था .... और आपकी व्याख्या सही है। धन्यवाद! – MikeTWebb
select convert(varchar, Max(Time) - Min(Time) , 108) from logTable where id=...
दो टाइमस्टैम्प के बीच 27 घंटे के अंतर के लिए "03:00:00" आउटपुट होगा ... – XpiritO
UPDATED:
सही ढंग से एसक्यूएल सर्वर में एक समयावधि की गणना, भले ही 24 घंटों से अधिक:
-- Setup test data
declare @minDate datetime = '2012-12-12 20:16:47.160'
declare @maxDate datetime = '2012-12-13 15:10:12.050'
-- Get timespan in hh:mi:ss
select cast(
(cast(cast(@maxDate as float) - cast(@minDate as float) as int) * 24) /* hours over 24 */
+ datepart(hh, @maxDate - @minDate) /* hours */
as varchar(10))
+ ':' + right('0' + cast(datepart(mi, @maxDate - @minDate) as varchar(2)), 2) /* minutes */
+ ':' + right('0' + cast(datepart(ss, @maxDate - @minDate) as varchar(2)), 2) /* seconds */
-- Returns 18:53:24
एज मामलों है कि अशुद्धि दिखाने के लिए विशेष रूप से स्वागत कर रहे हैं!
@Tim .... यह लगभग काम करता है। इन दो तिथियों के लिए (2012-12-13 15: 10: 12.050 और 2012-12-12 20: 16: 47.160) आपकी क्वेरी ने 1 9:54:25 का परिणाम दिया जब वास्तविक मूल्य 18:53:24 है। विचार? – MikeTWebb
@MikeTWebb आपको वर्तमान संस्करण को अच्छी तरह से काम करने के लिए मिल सकता है यदि आप किसी फ़ंक्शन का उपयोग नहीं करना चाहते हैं या कितने घंटे प्रदर्शित किए जा सकते हैं। –
पर देखने के लिए कि इस मदद करता है। मैं विलुप्त दिन, घंटे, मिनट, सेकेंड के लिए चर सेट कर सकता हूं। आप इसे अपनी पसंद के अनुसार प्रारूपित कर सकते हैं या उपयोगकर्ता परिभाषित फ़ंक्शन में शामिल कर सकते हैं।
नोट: डेटडिफ़ (एचएच, @ डेट 1, @ डेट 2) का उपयोग न करें। यह भरोसेमंद नहीं है! यह अप्रत्याशित तरीकों से घूमता है
दो तिथियां दी गईं ... (नमूना तिथियाँ: दो दिन, तीन घंटे, 10 मिनट, 30 सेकंड का अंतर)
declare @Date1 datetime = '2013-03-08 08:00:00'
declare @Date2 datetime = '2013-03-10 11:10:30'
declare @Days decimal
declare @Hours decimal
declare @Minutes decimal
declare @Seconds decimal
select @Days = DATEDIFF(ss,@Date1,@Date2)/60/60/24 --Days
declare @RemainderDate as datetime = @Date2 - @Days
select @Hours = datediff(ss, @Date1, @RemainderDate)/60/60 --Hours
set @RemainderDate = @RemainderDate - (@Hours/24.0)
select @Minutes = datediff(ss, @Date1, @RemainderDate)/60 --Minutes
set @RemainderDate = @RemainderDate - (@Minutes/24.0/60)
select @Seconds = DATEDIFF(SS, @Date1, @RemainderDate)
select @Days as ElapsedDays, @Hours as ElapsedHours, @Minutes as ElapsedMinutes, @Seconds as ElapsedSeconds
आशा इस दो समय टिकटों
Create PROC TimeDurationbetween2times(@iTime as time,@oTime as time)
As
Begin
DECLARE @Dh int, @Dm int, @Ds int ,@Im int, @Om int, @Is int,@Os int
SET @Im=DATEPART(MI,@iTime)
SET @Om=DATEPART(MI,@oTime)
SET @Is=DATEPART(SS,@iTime)
SET @Os=DATEPART(SS,@oTime)
SET @Dh=DATEDIFF(hh,@iTime,@oTime)
SET @Dm = DATEDIFF(mi,@iTime,@oTime)
SET @Ds = DATEDIFF(ss,@iTime,@oTime)
DECLARE @HH as int, @MI as int, @SS as int
if(@Im>@Om)
begin
SET @[email protected]
end
if(@Is>@Os)
begin
SET @[email protected]
end
SET @HH = @Dh
SET @MI = @Dm-(60*@HH)
SET @SS = @Ds-(60*@Dm)
DECLARE @hrsWkd as varchar(8)
SET @hrsWkd = cast(@HH as char(2))+':'+cast(@MI as char(2))+':'+cast(@SS as char(2))
select @hrsWkd as TimeDuration
End
DECLARE @EndTime AS DATETIME, @StartTime AS DATETIME
SELECT @StartTime = '2013-03-08 08:00:00', @EndTime = '2013-03-08 08:30:00'
SELECT CAST(@EndTime - @StartTime AS TIME)
परिणाम के बीच सही समय प्राप्त करने में मदद करता है: 00:30:00.0000000
प्रारूप परिणाम जैसा आप फिट देखते हैं।
यह केवल SQL Server 2008+ में काम करता है, लेकिन यह एक अच्छा समाधान है मान लीजिए कि आप संस्करण की गारंटी दे सकते हैं। –
विफल होगा यदि समय 24 घंटे से अधिक हो – Dave
सबसे अच्छा और आसान तरीका:
Convert(varchar, {EndTime} - {StartTime}, 108)
बस Anri तरह का उल्लेख किया।
, मिलीसेकंड, सेकंड, मिनट, घंटे में मान देने के लिए DateDiff का प्रयोग करें ...
DateDiff (अंतराल, DATE1, DATE2)
अंतराल आवश्यक - समय/तारीख हिस्सा लौटने के लिये। निम्न मानों में से एक हो सकता है:
year, yyyy, yy = Year
quarter, qq, q = Quarter
month, mm, m = month
dayofyear = Day of the year
day, dy, y = Day
week, ww, wk = Week
weekday, dw, w = Weekday
hour, hh = hour
minute, mi, n = Minute
second, ss, s = Second
millisecond, ms = Millisecond
DATE1, DATE2आवश्यक - दो तिथियों
- 1. एचएच में डेटाडिफ़: एमएम: एसएस प्रारूप
- 2. दो तिथियों के बीच एसक्यूएल समय अंतर एचएच: मिमी: एसएस
- 3. एचएच में वर्तमान समय: एमएम: एसएस am/pm प्रारूप?
- 4. एक पूर्णांक (समय) को एचएच में कैसे परिवर्तित करें: एमएम: एसएस :: 00 एसक्यूएल सर्वर 2008 में?
- 5. MySQL: DATETIME के प्रारूप को 'डीडी-एमएम-वाईवायवाई एचएच: एमएम: एसएस' में एक टेबल बनाते समय
- 6. एचएच में समय में अंतर प्राप्त करें: एमएम प्रारूप php
- 7. एचएच के साथ स्ट्रिंग में समय: एमएम: एसएस प्रारूप (सी प्रोग्रामिंग)
- 8. एचएच में सेकंड सेकेंड काउंट करें: एमएम: एसएसआरएस 2008 में एसएस प्रारूप
- 9. दशमलव में समय को कैसे परिवर्तित करें, उदाहरण के लिए। एचएच: एमएम: एसएस
- 10. YYYY-MM-DD एचएच के लिए ओरेकल में टाइमस्टैम्प रूपांतरण: एमएम: एसएस प्रारूप
- 11. दिनांक परिवर्तन के संबंध में दो समय फ़ील्ड के बीच समय अंतर की गणना कैसे करें
- 12. आप सेकेंड को एचएच में कैसे परिवर्तित करेंगे: एमएम: एसक्यूएलसाइट में एसएस प्रारूप?
- 13. एसक्यूएल सर्वर दिनांक प्रारूप एमएम/डीडी/वाईवायवाई
- 14. एचएच को समय-समय पर प्रारूपित करने के लिए कैसे करें: एमएम: एसएसटी में datalabel
- 15. मैं डीडी/एमएम/वाईवाईवाई एचएच: एमएम प्रारूप में वर्तमान दिनांक/समय कैसे प्राप्त करूं?
- 16. दो डेटाटाइम प्रारूप
- 17. विलुप्त होने का समय
- 18. आउटपुट सेकंड में है। एचएच में परिवर्तित: मिमी: एसएस प्रारूप में php
- 19. इस प्रारूप में सेकंड को कैसे परिवर्तित करें "एचएच: मिमी: एसएस"
- 20. एसक्यूएल सर्वर डेटाटाइम मुद्दे। अमेरिकी बनाम ब्रिटिश?
- 21. यूनिक्स टाइम टिकटों के बीच समय अंतर की गणना कैसे करें?
- 22. एसक्यूएल सर्वर में डेटाटाइम का आंतरिक प्रतिनिधित्व क्या है?
- 23. दो पंक्तियों के बीच समय अंतर की गणना करें
- 24. एचएच कनवर्ट करें: एमएम: एसएसएमएम सेकेंड में बैश
- 25. एसक्यूएल INT से डेटाटाइम
- 26. मैं एचएच: एमएम: एसएस को सी # .net का उपयोग करके बस सेकंड में कैसे परिवर्तित करूं?
- 27. SQL सर्वर में दो तिथियों के बीच घंटों (दशमलव) में अंतर की गणना कैसे करें?
- 28. एचएच जैसे डेटटाइम प्रारूप: एमएम 24 घंटे बिना एएम/पीएम
- 29. पायथन में समय की गणना (डेटाटाइम.timedelta?)
- 30. दिनों में एसक्यूएल में डेटडिफ की गणना करें: घंटे: न्यूनतम: सेकेंड प्रारूप
के बीच अंतर की गणना करने के लिए हमें "टाइम" स्तंभ के डेटाप्रकार से अवगत कराएं। डेटटाइम, डेटटाइम 2, टाइम, टाइमस्टैम्प, आदि –
@ टिम ... मेरा बुरा, डेटटाइम – MikeTWebb