将秒转换为HH:MM:SS格式

时间:2013-01-02 04:22:09

标签: sql sql-server

如何在SQL Server中将秒(int)转换为HH:MM:SS格式?

e.g。 90应该输出=> 0点01分30秒

更新

我有两个日期START_DATEENDDATE

我希望这些日期不同

最后,我想以HH:MM:SS格式

总结这些差异

FIDDLE:http://sqlfiddle.com/#!3/39c2b/1/0

7 个答案:

答案 0 :(得分:3)

      declare @sec int
      set @sec=10

      select
          convert(varchar(5),@sec/3600)
           +':'+convert(varchar(5),@sec%3600/60)
           +':'+convert(varchar(5),(@sec%60));

更新
数据为hh:mm:ss使用“替换”

             declare @sec int
             set @sec=90

     select
          replace(convert(varchar(5),@sec/3600)
            +':'+str(convert(varchar(5),@sec%3600/60),2)
            +':'+str(convert(varchar(5),(@sec%60)),2),' ','0');


例如,看这里example

答案 1 :(得分:2)

declare @Seconds int;
set @Seconds = 90;
select replace(str(@Seconds/3600,len(ltrim(@Seconds/3600))+
abs(sign(@Seconds/359999)-1)) + ':' + str((@Seconds/60)%60,2)+
':' + str(@Seconds%60,2),' ','0')

答案 2 :(得分:0)

您所指的是SQL中的TIMESPAN概念。但是,T-SQL中没有TIMESPAN变量。相反,您可以使用以下概念。

我不会使用ElapsedSecond作为存储变量(虽然它可以工作)。原因是要有效地表示TIMESPAN,最好将其存储为DATETIME。这样,您就可以获得DATETIME变量的所有灵活性。例如,您可以执行YEAR( @TimeSpan)MONTH( @TimeSpan )。如果您存储了ElapsedSecond,那将很难做到。

在T-SQL中说明这个概念:

DECLARE @StartDate AS DATETIME
DECLARE @EndDate AS DATETIME
SET @StartDate = '1/1/2013 1:01:58'
SET @EndDate = '1/5/2013 7:02:00'

DECLARE @TimeSpan AS DATETIME
SET @TimeSpan =  @EndDate - @StartDate

PRINT   CONVERT( VARCHAR, (DATEDIFF( DAY, 0, @TimeSpan) * 24) + DATEPART(HOUR, @TimeSpan) )
        + ':' + RIGHT( '0' + CONVERT( VARCHAR, DATEPART( MINUTE, @TimeSpan ) ), 2)
        + ':' + RIGHT( '0' + CONVERT( VARCHAR, DATEPART( SECOND, @TimeSpan ) ), 2 )

请注意,在上面,您可以使用DATEPART()函数并像任何DATETIME变量一样处理TimeSpan。当您了解更多细节时,这将更加灵活和重要。

另一个优点是负面 Timespan。如果您使用ElapsedSecond方法,该函数将失败,而TimeSpan将继续存在。

答案 3 :(得分:0)

这可能会有所帮助 - 减去时间部分的好例子。你可以添加/总结......:

Select start_date, end_date, time_diff,
   EXTRACT(DAY FROM time_diff) days,
   EXTRACT(HOUR FROM time_diff) hours,
   EXTRACT(MINUTE FROM time_diff) minutes,
   EXTRACT(SECOND FROM time_diff) seconds
From
(
Select start_date, end_date, end_date - start_date time_diff
From
(
Select CAST(to_date('21/02/2012 06:10:00 am', 'dd/mm/yyyy  hh:mi:ss am') AS TIMESTAMP)  end_date
     , CAST(to_date('01/01/2012 12:00:00 am', 'dd/mm/yyyy  hh:mi:ss am') AS TIMESTAMP) start_date
From dual
))
/

答案 4 :(得分:0)

这将生成有效的.NET时间戳。但代码尚未优化。

create function [dbo].to_timespan(@secs as int) returns nvarchar(16)
begin
    declare @mins int, @hours int, @days int;
    set @days = @secs / (60 * 60 * 24);
    set @secs = @secs - @days * (60 * 60 * 24); 
    set @hours = @secs / (60 * 60);
    set @secs = @secs - @hours * (60 * 60);
    set @mins = @secs / 60;
    set @secs = @secs - @mins * 60;
    return replace(str(@days, 2) + '.' + str(@hours, 2) + ':' + str(@mins, 2) + ':' + str(@secs, 2), ' ', '0');
end
GO

答案 5 :(得分:0)

从两个DATETIME值的差异返回HH:MM:SS字符串输出的最简单方法是使用内置的T-SQL日期/时间函数。

DECLARE
    @Start_Date DATETIME = DATEADD(SECOND, -86399, GETDATE())
  , @End_Date DATETIME = GETDATE();


SELECT 
    CONVERT (VARCHAR(8), 
    DATEADD(SECOND, DATEDIFF(SECOND, @Start_Date, @End_Date), 0), 108) 
    AS ElapsedHHMMSS;

输出: 23时59分59秒

但请注意,如果您处理的时间超过1天,您可能需要除HH之外的其他输出:MM:SS。这在24小时后最大化,但对于此格式,24:00:01无论如何都不合适。上面的一些其他响应将产生无效的24:00:01输出。

答案 6 :(得分:-1)

    select to_char(to_date(90,'sssss'),'hh24:mi:ss') from dual;

尝试这个伴侣