स्थिति यह है कि आपके पास सेकंड्स (XXX.XX) में एक मूल्य है, और आप एचएच: एमएम: एसएस को टी-एसक्यूएल का उपयोग करके परिवर्तित करना चाहते हैं।
उदाहरण:
- 121.25 एस 00 हो जाता है: 02: 01.25
स्थिति यह है कि आपके पास सेकंड्स (XXX.XX) में एक मूल्य है, और आप एचएच: एमएम: एसएस को टी-एसक्यूएल का उपयोग करके परिवर्तित करना चाहते हैं।
उदाहरण:
जवाबों:
आप अंशों को छोड़ना चाहते हैं क्योंकि अंश आंशिक रूप से छूट जाता है।
SELECT DATEADD(ms, 121.25 * 1000, 0)
यदि आप इसे दिनांक भाग के बिना चाहते हैं तो आप CONVERT का उपयोग कर सकते हैं, स्टाइल 114 के साथ
SELECT CONVERT(varchar, DATEADD(ms, 121.25 * 1000, 0), 114)
यदि आपकी समय राशि 24 घंटे से अधिक है तो इसे DATEADD और CONVERT विधियों के साथ सही तरीके से नहीं संभाला जाएगा।
SELECT CONVERT(varchar, DATEADD(ms, 24*60*60 * 1000, 0), 114)
00:00:00:000
निम्नलिखित कार्य 24 घंटे (~ अधिकतम 35,791,394 घंटे) से अधिक समय संभालेंगे।
create function [dbo].[ConvertTimeToHHMMSS]
(
@time decimal(28,3),
@unit varchar(20)
)
returns varchar(20)
as
begin
declare @seconds decimal(18,3), @minutes int, @hours int;
if(@unit = 'hour' or @unit = 'hh' )
set @seconds = @time * 60 * 60;
else if(@unit = 'minute' or @unit = 'mi' or @unit = 'n')
set @seconds = @time * 60;
else if(@unit = 'second' or @unit = 'ss' or @unit = 's')
set @seconds = @time;
else set @seconds = 0; -- unknown time units
set @hours = convert(int, @seconds /60 / 60);
set @minutes = convert(int, (@seconds / 60) - (@hours * 60 ));
set @seconds = @seconds % 60;
return
convert(varchar(9), convert(int, @hours)) + ':' +
right('00' + convert(varchar(2), convert(int, @minutes)), 2) + ':' +
right('00' + convert(varchar(6), @seconds), 6)
end
उपयोग:
select dbo.ConvertTimeToHHMMSS(123, 's')
select dbo.ConvertTimeToHHMMSS(96.999, 'mi')
select dbo.ConvertTimeToHHMMSS(35791394.999, 'hh')
0:02:03.000
1:36:59.940
35791394:59:56.400
24 घंटे से अधिक सेकंड के लिए DATEADD और CONVERT का उपयोग करने वाले मुद्दों के लिए, हम इसके लिए प्राप्त करने के लिए मापांक का उपयोग कर सकते हैं:
SELECT CONVERT(varchar, @seconds / 86400 ) + ':' + -- Days
CONVERT(varchar, DATEADD(ms, ( @seconds % 86400 ) * 1000, 0), 114)
as "Converted to D:HH:MM:SS.MS"
DECLARE @seconds AS int = 896434;
SELECT
CONVERT(varchar, (@seconds / 86400)) --Days
+ ':' +
CONVERT(varchar, DATEADD(ss, @seconds, 0), 108); --Hours, Minutes, Seconds
आउटपुट:
10:09:00:34
second
एस के साथ व्यवहार करता है , जैसा कि ओपी ने पूछा है, एक अक्षम का उपयोग करने से बचता है scalar function
, और उचित रूप से बहु-दिवसीय स्पैन से संबंधित है। एकमात्र मामूली नाइट मैं जोड़ूंगा कि, SQL एजेंट भूमि में, "दिन" भाग के लिए आपके बीता-समय / समय-अंतराल आमतौर पर "days.hh: mm: ss" का उपयोग करते हैं, अर्थात dot
इसके बजाय colon
। तो उदाहरण के 2.01:03:04
लिए 2 दिन, 1 घंटा, 3 मिनट, 4 सेकंड। चीयर्स!
SQL Server 2008 का उपयोग करना
declare @Seconds as int = 3600;
SELECT CONVERT(time(0), DATEADD(SECOND, @Seconds, 0)) as 'hh:mm:ss'
SQL सर्वर 05 का उपयोग करके मैं इसे काम करके प्राप्त कर सकता हूं:
declare @OrigValue int;
set @OrigValue = 121.25;
select replace(str(@OrigValue/3600,len(ltrim(@OrigValue/3600))+abs(sign(@OrigValue/359999)-1)) + ':' + str((@OrigValue/60)%60,2) + ':' + str(@OrigValue%60,2),' ','0')
DECLARE @TimeinSecond INT
SET @TimeinSecond = 340 -- Change the seconds
SELECT RIGHT('0' + CAST(@TimeinSecond / 3600 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST((@TimeinSecond / 60) % 60 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST(@TimeinSecond % 60 AS VARCHAR),2)
यह वही है जो मैं उपयोग करता हूं (आमतौर पर html टेबल ईमेल रिपोर्ट के लिए)
declare @time int, @hms varchar(20)
set @time = 12345
set @hms = cast(cast((@Time)/3600 as int) as varchar(3))
+':'+ right('0'+ cast(cast(((@Time)%3600)/60 as int) as varchar(2)),2)
+':'+ right('0'+ cast(((@Time)%3600)%60 as varchar(2)),2) +' (hh:mm:ss)'
select @hms
आप यह कोशिश कर सकते हैं
set @duration= 112000
SELECT
"Time" = cast (@duration/3600 as varchar(3)) +'H'
+ Case
when ((@duration%3600 )/60)<10 then
'0'+ cast ((@duration%3600 )/60)as varchar(3))
else
cast ((@duration/60) as varchar(3))
End