2016-07-25 127 views
0

我想在減去兩個日期時得到日期差異00-00-00 00:00:00 但是我得到的結果始終始於1900 -01-01。如何通過從另一個日期中減去一個日期來獲得日期結果

我如何得到這個只顯示剩餘的日期和時間。 甚至值說明(X)天(X)小時(X)分鐘

SELECT TOP 
    [Open_Date] 
    ,[Close_Date] 
    ,([Open_Date]-[Close_Date]) as [test] 
    ,[time_spent_sum] 
    ,[support_lev] 
    ,[Priority] 
    ,[CountCases] 
    ,[Last_Update_Status] 
    ,[Last_Update_Date] 
    ,[Customer Group] 
    ,[Assignee Group] 
    ,[3rd_Party] 
    ,[rootcause] 
    ,[location_name] 
    ,[Dataline] 
    ,[InterfaceID] 
    ,[DAYS OPEN] 
    FROM [mdb].[dbo].[ReportsView] 

我一直在與一些信徒瞎搞,但沒有得到預期的效果。

case 
    when [Close_Date] is null then format(convert(smalldatetime, dateadd(minute, (datediff(minute,[Open_Date],getdate())), ''), 114),'d ''days'' HH ''Hrs'' :mm ''Mins'' ') 
    when [Close_Date] is not null then format(convert(smalldatetime, dateadd(minute, (datediff(minute,[Open_Date],[Close_Date])), 0), 114),'d ''days'' HH ''Hrs'' :mm ''Mins'' ') 
    else null 
    end as [Total_call_open_time] 

DATES

+1

參見DATEDIFF函數 – Serg

+0

您正在使用哪個數據庫管理系統?它們都支持「DATE ARITHMETIC」,但具有不同的函數名稱和語法。 – FDavidov

+0

嗨,我正在使用SQL服務器2016 – Jay

回答

0

爲了更準確地代表你需要找到兩個日期之間的實際時間的兩個時間段之間的天/小時/分/秒的數量,datediff實際上告訴你如何你跨越很多界限。

例如兩個以下將返回值1,即使有兩個時期接近48的小時差:

select datediff(day,'2000-01-01 00:00:01','2000-01-02 23:59:59') 
select datediff(day,'2000-01-01 23:59:59','2000-01-02 00:00:01') 

因此,下面會做你需要什麼,用DIV /和MOD %計算總時間跨度和任何遺留下來的:

declare @d1 datetime = dateadd(day,-1,dateadd(hour,-2,dateadd(minute,-3,dateadd(second,-4,getdate())))) 
declare @d2 datetime = getdate() 

select datediff(hour,@d1,@d2)/24 as Days 
     ,datediff(minute,@d1,@d2)/60%24 as Hours 
     ,datediff(second,@d1,@d2)/60%60 as Minutes 
     ,datediff(second,@d1,@d2)%60%60 as Seconds 

     ,cast(datediff(hour,@d1,@d2)/24 as nvarchar(3)) + case when cast(datediff(day,@d1,@d2) as nvarchar(3)) = 1 then ' Day, ' else ' Days, ' end 
     + cast(datediff(minute,@d1,@d2)/60%24 as nvarchar(3)) + case when cast(datediff(hour,@d1,@d2)%24 as nvarchar(3)) = 1 then ' Hour, ' else ' Hours, ' end 
     + cast(datediff(second,@d1,@d2)/60%60 as nvarchar(3)) + case when cast(datediff(Minute,@d1,@d2)%60 as nvarchar(3)) = 1 then ' Minute, ' else ' Minutes, ' end 
     + cast(datediff(Second,@d1,@d2)%60%60 as nvarchar(3)) + case when cast(datediff(Second,@d1,@d2)%60%60 as nvarchar(3)) = 1 then ' Second' else ' Seconds' end as TimeDifference 
+0

謝謝你,這很完美! – Jay