HH: MM: SS को T-SQL का उपयोग करके सेकेंड में कैसे बदलें


85

स्थिति यह है कि आपके पास सेकंड्स (XXX.XX) में एक मूल्य है, और आप एचएच: एमएम: एसएस को टी-एसक्यूएल का उपयोग करके परिवर्तित करना चाहते हैं।

उदाहरण:

  • 121.25 एस 00 हो जाता है: 02: 01.25

जवाबों:


142

आप अंशों को छोड़ना चाहते हैं क्योंकि अंश आंशिक रूप से छूट जाता है।

SELECT DATEADD(ms, 121.25 * 1000, 0)

यदि आप इसे दिनांक भाग के बिना चाहते हैं तो आप CONVERT का उपयोग कर सकते हैं, स्टाइल 114 के साथ

SELECT CONVERT(varchar, DATEADD(ms, 121.25 * 1000, 0), 114)

3
सेनेट कंवर्ट (varchar, DATEADD (ms, 121.25 * 1000, 0), 114) यह है।
१०:१०

20
अगर आपके पास 24 घंटे से अधिक का समय नहीं है तो यह काम नहीं करेगा
JamWheel

21
बहुत साफ़। 108 का उपयोग करें यदि आप मिलीसेकंड नहीं चाहते हैं, यानी hh: mi: ss
stuartd

8
यदि आपके पास SQL ​​2008+ है और बस समय भाग चाहते हैं; विचर में कनवर्ट करने के बजाय: SELECT CONVERT (समय, DATEADD (ms, 121.25 * 1000, 0))
एरिक हम्फ्री

47

यदि आपकी समय राशि 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 का उपयोग करके सही ढंग से स्वरूपित नहीं किया जाएगा?
गत

5
@gotqn: DateAdd () समस्या नहीं है। कन्वर्ट () समस्या है। कन्वर्ट () प्रभावी रूप से प्रत्येक 24 घंटे में शून्य के आसपास लपेटता है। यदि आप 27-घंटे के अंतराल को प्रारूपित करने के लिए Convert () का उपयोग करते हैं, तो यह "03:00:00" वापस आ जाएगा।
माइक शेरिल 'कैट रिकॉल'

इस स्वरूपण को कैसे संभालें यदि उपयोग का मामला कहता है कि परिणाम ऋणात्मक hh हो सकते हैं: mm: ss (जैसे। -340: 23: 34, 03: -4: 05,13: 54: -8 आदि)
OmGanesh

1
जाने का यह रास्ता है। 24 घंटे से आगे एचएचएमएसएमएस फॉर्मेटिंग के लिए यहां कोई भी अन्य समाधान ठीक से काम नहीं करेगा। यह आपके प्रश्नों को साफ रखने में भी मदद करेगा।
क्रुमेलिज़

27

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"

21
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

1
यह स्वीकृत उत्तर होना चाहिए - यह secondएस के साथ व्यवहार करता है , जैसा कि ओपी ने पूछा है, एक अक्षम का उपयोग करने से बचता है scalar function, और उचित रूप से बहु-दिवसीय स्पैन से संबंधित है। एकमात्र मामूली नाइट मैं जोड़ूंगा कि, SQL एजेंट भूमि में, "दिन" भाग के लिए आपके बीता-समय / समय-अंतराल आमतौर पर "days.hh: mm: ss" का उपयोग करते हैं, अर्थात dotइसके बजाय colon। तो उदाहरण के 2.01:03:04लिए 2 दिन, 1 घंटा, 3 मिनट, 4 सेकंड। चीयर्स!
नैटज


4

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')

1
इसने मेरे लिए काम नहीं किया। यदि आप 896434 सेकंड - आप 10 चाहते हैं: 09: 00: 34: 000 और नहीं 249: 00: 34
Marcello Miorelli

1
SELECT substring(convert (varchar(23),Dateadd(s,10000,LEFT(getdate(),11)),121),12,8)

10000 सेकंड में आपका मूल्य है


1
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)

1

यह वही है जो मैं उपयोग करता हूं (आमतौर पर 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

0
DECLARE @Seconds INT = 86200;
SELECT 
CONVERT(VARCHAR(15), 
CAST(CONVERT(VARCHAR(12), @Seconds / 60 / 60 % 24)
+':'+ CONVERT(VARCHAR(2), @Seconds / 60 % 60)
+':'+ CONVERT(VARCHAR(2), @Seconds % 60) AS TIME), 100) AS [HH:MM:SS (AM/PM)]

यहाँ छवि विवरण दर्ज करें


0

आप यह कोशिश कर सकते हैं

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.