首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据日期范围计算天数

根据日期范围计算天数
EN

Stack Overflow用户
提问于 2019-10-23 13:41:57
回答 3查看 76关注 0票数 2

我有如下数据

代码语言:javascript
复制
create table #Temp(Id int, FromDate date, ToDate date)
Insert into #Temp
values(1,'9/1/2019','9/1/2019'),
        (2,'9/2/2019','9/3/2019'),
        (3,'9/2/2019','9/3/2019'),
        (4,'9/4/2019','9/6/2019'),
        (5,'9/7/2019','9/7/2019')

我试着计算差异并创建日,比如第一天,第二天-第三天……

预期结果

代码语言:javascript
复制
Id  FromDate    ToDate      Display
1   01/09/2019  01/09/2019  Day 1
2   02/09/2019  03/09/2019  Day 2-3
3   02/09/2019  03/09/2019  Day 2-3
4   04/09/2019  06/09/2019  Day 4-6
5   07/09/2019  07/09/2019  Day 7

我尝试过使用datediff编写下面的代码,但不确定如何与上一行关联并获取日期范围。

代码语言:javascript
复制
select *, DATEDIFF(DAY,FromDate,ToDate)
from #Temp
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-23 13:49:18

使用first_value

代码语言:javascript
复制
select *
 , datediff(day, first_value(FromDate) over(order by FromDate), FromDate) + 1
 , datediff(day, first_value(FromDate) over(order by FromDate), ToDate) + 1
from #Temp
票数 2
EN

Stack Overflow用户

发布于 2019-10-23 13:56:25

如果您想要完全相同的输出,可以尝试这样做。

代码语言:javascript
复制
Select 
      * ,
     case 
      when (FromDate != ToDate) 
       then 
        'Day '+ DATEPART(Day,FromDate) + '-' + DATEPART(Day,ToDate)
       else
      'Day '+ DATEPART(Day,FromDate)
      END AS Display
    From #Temp
票数 1
EN

Stack Overflow用户

发布于 2019-10-23 13:51:02

您不需要上一行的值,而是想要最早的从日期开始,然后可以将其与每一行进行比较。

代码语言:javascript
复制
select id, min (fromdate) over (order by fromdate asc) as earliest_date,fromDate,todate,
datediff(day,min (fromdate) over (order by fromdate asc),fromdate)+1,
datediff(day,min (fromdate) over (order by fromdate asc),todate)+1
from
#temp

小提琴

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58524246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档