2016-07-25 129 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