SQL Server:计算已过去的天数

时间:2015-07-10 19:54:57

标签: sql-server

我需要获取当前日期之间任意两个日期之间经过的天数。 IE:

mm/dd/yyyy

Current day = 07/10/2015  
07/08/2013 ...  07/11/2013 - 4 days elapsed

Current day = 07/10/2015  
07/08/2015 ... 07/11/2015 - 2 days have elapsed

我使用DATEDIFFday作为日期部分尝试了几种组合,但是,我似乎无法获得一个干净的方式来获取日期过去的日期可能过去或现在。

修改

我知道某个业务流程的开始日期和结束日期。它们可能是今年,去年,两年前等等。我需要一种通过SQL Server函数来计算总天数的方法。如果它不是当前年份,显然整个范围/范围都会过去。如果它是当前年份,也许整个范围/范围都没有过去,而且需要说明过程中有多少天#34;"基于受尊重的开始时间,结束时间和当前时间。

希望这更有意义吗?

请帮忙。

我使用@Sean Lange进行了一些小调整: DATEDIFF(DAY,@ StartDate,@EndDate< GETDATE()的情况,然后是@EndDate + 1,否则GETDATE()结束)
谢谢大家。

2 个答案:

答案 0 :(得分:0)

这个怎么样:

假设:

CREATE TABLE dbo.test ( ChildID INT Identity,
                            Start   DateTime
                    ,       Finish  DateTime
                    )

和您的测试数据:

insert into dbo.test (start,finish) values('07/08/2013','07/11/2013')
insert into dbo.test (start,finish) values('07/08/2015','07/11/2015')

然后

select start,finish
 , DATEDIFF(DAY, start, CASE WHEN GETDATE() BETWEEN start and finish 
             THEN GETDATE() - 1  ELSE finish END) + 1 as elapsed
 from dbo.test

给出了你的例子的结果。

如果对当前日期如何适合between范围进行其他调整,则可能需要进行调整。

答案 1 :(得分:0)

这与斯坦提供的答案非常相似,但这是我对此的看法。

with Something as
(
    select CAST('2013-07-08' as datetime) as StartDate
        , CAST('2013-07-11' as datetime) as EndDate
    union all
    select '2015-07-08', '2015-07-11'
)

select *
    , DATEDIFF(DAY, StartDate, case when EndDate < GETDATE() then EndDate else GETDATE() end)
from Something