我需要获取当前日期之间任意两个日期之间经过的天数。 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
我使用DATEDIFF
和day
作为日期部分尝试了几种组合,但是,我似乎无法获得一个干净的方式来获取日期过去的日期可能过去或现在。
修改
我知道某个业务流程的开始日期和结束日期。它们可能是今年,去年,两年前等等。我需要一种通过SQL Server函数来计算总天数的方法。如果它不是当前年份,显然整个范围/范围都会过去。如果它是当前年份,也许整个范围/范围都没有过去,而且需要说明过程中有多少天#34;"基于受尊重的开始时间,结束时间和当前时间。
希望这更有意义吗?
请帮忙。
我使用@Sean Lange进行了一些小调整:
DATEDIFF(DAY,@ StartDate,@EndDate< GETDATE()的情况,然后是@EndDate + 1,否则GETDATE()结束)
谢谢大家。
答案 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