我试图通过以下代码查询两个日期之间的时差:
DECLARE @firstDate DATETIME
DECLARE @SecondDate DATETIME
SELECT
CONVERT(VARCHAR(5), DATEDIFF(dd, @firstDate, @SecondDate)) + ' Days ' +
CONVERT(VARCHAR(5), (DATEDIFF(hh, @firstDate, @SecondDate) - DATEDIFF(dd, @firstDate, @SecondDate) * 24) % 3600) + ':' +
CONVERT(VARCHAR(5), DATEDIFF(s, @firstDate, @SecondDate) % 3600 / 60) + ':' +
CONVERT(VARCHAR(5), DATEDIFF(s, @firstDate, @SecondDate) % 60) AS Time_remain_In_Days
但如果
,它会产生有问题的输出set @firstDate = '2013-12-17 15:35'
set @SecondDate = '2013-12-18 14:35'
输出为 1天-1:0:0
但它应该是 0天23:0:0
我已经在视图中编写了上面的代码。
请帮我修改上述查询以获得所需的输出
答案 0 :(得分:5)
如果您使用的是SQL Server 2008或更高版本,则应该这样做:
declare @firstDate datetime
declare @SecondDate datetime
set @firstDate='2013-12-17T15:35:00'
set @SecondDate='2013-12-18T14:35:00'
select
CONVERT(varchar(10),DATEDIFF(second,@firstDate,@secondDate)/86400)
+ ' days ' +
CONVERT(varchar(10),CONVERT(time,
DATEADD(second,DATEDIFF(second,@firstDate,@secondDate)%86400,0)))
对于早期版本,应该这样做:
select
CONVERT(varchar(10),DATEDIFF(second,@firstDate,@secondDate)/86400)
+ ' days ' +
CONVERT(varchar(10),
DATEADD(second,DATEDIFF(second,@firstDate,@secondDate)%86400,0),108)
答案 1 :(得分:0)
尝试这可能会有所帮助:
If OBJECT_ID('UFN_HourMinuteSecond') Is Not Null
Drop Function dbo.UFN_HourMinuteSecond
Go
Exec(
'Create Function dbo.UFN_HourMinuteSecond
(
@StartDateTime DateTime,
@EndDateTime DateTime
) Returns Varchar(10)
As
Begin
Declare @Seconds Int,
@Minute Int,
@Hour Int,
@Elapsed Varchar(10)
Select @Seconds = ABS(DateDiff(SECOND ,@StartDateTime,@EndDateTime))
If @Seconds >= 60
Begin
select @Minute = @Seconds/60
select @Seconds = @Seconds%60
If @Minute >= 60
begin
select @hour = @Minute/60
select @Minute = @Minute%60
end
Else
Goto Final
End
Final:
Select @Hour = Isnull(@Hour,0), @Minute = IsNull(@Minute,0), @Seconds = IsNull(@Seconds,0)
select @Elapsed = Cast(@Hour as Varchar) + '':'' + Cast(@Minute as Varchar) + '':'' + Cast(@Seconds as Varchar)
Return (@Elapsed)
End'
)