我在计算两个日期之间的时差时面临一些困难.
我想要的是,我有两个日期可以说
@StartDate = '10/01/2012 08:40:18.000'
@EndDate='10/04/2012 09:52:48.000'
Run Code Online (Sandbox Code Playgroud)
所以两个日期之间的区别hh:mm:ss是72:42:30.
如何在T-SQL查询中获得此结果?
Fra*_*lin 42
declare @StartDate datetime, @EndDate datetime
select @StartDate = '10/01/2012 08:40:18.000',@EndDate='10/04/2012 09:52:48.000'
select convert(varchar(5),DateDiff(s, @startDate, @EndDate)/3600)+':'+convert(varchar(5),DateDiff(s, @startDate, @EndDate)%3600/60)+':'+convert(varchar(5),(DateDiff(s, @startDate, @EndDate)%60)) as [hh:mm:ss]
Run Code Online (Sandbox Code Playgroud)
此查询对您有所帮助.
SQL*_*nbe 26
最短的代码是:
Select CAST((@EndDateTime-@StartDateTime) as time(0)) '[hh:mm:ss]'
Run Code Online (Sandbox Code Playgroud)
虽然可能不是最有效的,但这可行:
declare @StartDate datetime, @EndDate datetime
select @StartDate = '10/01/2012 08:40:18.000',@EndDate='10/04/2012 09:52:48.000'
select convert(varchar(5),DateDiff(s, @startDate, @EndDate)/3600)+':'+convert(varchar(5),DateDiff(s, @startDate, @EndDate)%3600/60)+':'+convert(varchar(5),(DateDiff(s, @startDate, @EndDate)%60))
Run Code Online (Sandbox Code Playgroud)
如果你可以运行两个选择那么这会更好,因为你只做了一次:
declare @StartDate datetime, @EndDate datetime
select @StartDate = '10/01/2012 08:40:18.000',@EndDate='10/04/2012 09:52:48.000'
declare @Sec BIGINT
select @Sec = DateDiff(s, @startDate, @EndDate)
select convert(varchar(5),@sec/3600)+':'+convert(varchar(5),@sec%3600/60)+':'+convert(varchar(5),(@sec%60))
Run Code Online (Sandbox Code Playgroud)
小智 5
DECLARE @dt1 datetime='2012/06/13 08:11:12', @dt2 datetime='2012/06/12 02:11:12'
SELECT CAST((@dt2-@dt1) as time(0))
Run Code Online (Sandbox Code Playgroud)
我喜欢使它成为一个函数的想法,这样它就可以重新使用,并且您的查询也变得更容易阅读:
--get the difference between two datetimes in the format: 'h:m:s'
CREATE FUNCTION getDateDiff(@startDate DATETIME, @endDate DATETIME)
RETURNS VARCHAR(10)
AS BEGIN
DECLARE @seconds INT = DATEDIFF(s, @startDate, @endDate)
DECLARE @difference VARCHAR(10) =
CONVERT(VARCHAR(4), @seconds / 3600) + ':' +
CONVERT(VARCHAR(2), @seconds % 3600 / 60) + ':' +
CONVERT(VARCHAR(2), @seconds % 60)
RETURN @difference
END
Run Code Online (Sandbox Code Playgroud)
用法:
DECLARE @StartDate DATETIME = '10/01/2012 08:40:18.000'
DECLARE @endDate DATETIME = '10/04/2012 09:52:48.000'
SELECT dbo.getDateDiff(@startDate, @endDate) AS DateDifference
Run Code Online (Sandbox Code Playgroud)
结果:
DateDifference
1 73:12:30
Run Code Online (Sandbox Code Playgroud)
如果添加填充,读取结果也更容易,因此格式始终为hh:mm:ss。例如,这是在SQL Server 2012或更高版本中的处理方式:
--get the difference between two datetimes in the format: 'hh:mm:ss'
CREATE FUNCTION getDateDiff(@startDate DATETIME, @endDate DATETIME)
RETURNS VARCHAR(10)
AS BEGIN
DECLARE @seconds INT = DATEDIFF(s, @startDate, @endDate)
DECLARE @difference VARCHAR(10) =
FORMAT(@seconds / 3600, '00') + ':' +
FORMAT(@seconds % 3600 / 60, '00') + ':' +
FORMAT(@seconds % 60, '00')
RETURN @difference
END
Run Code Online (Sandbox Code Playgroud)
请注意,如果长度超过2位,则不会截断小时。所以1小时将显示为,01:00:00而100小时将显示为100:00:00