2013-12-17 16 views
0

我試圖讓兩個日期之間的查詢與此代碼的時間差:如何獲得在SQL Server中的兩個日期的時間差

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

我已經在視圖中編寫了上面的代碼。

請幫我修改上面的查詢,以獲得所需的輸出

回答

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) 
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' 
) 
相關問題