如何在SQL Server中将秒(int)转换为HH:MM:SS
格式?
e.g。 90应该输出=> 0点01分30秒
更新
我有两个日期START_DATE
和ENDDATE
。
我希望这些日期不同
最后,我想以HH:MM:SS
格式
答案 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;
尝试这个伴侣