如何从起始日期到结束日期之间的日期之间的间隔

问题描述 投票:-2回答:2

enter image description here我有一个名为tbl_monthly_leave的表

在下表中,我正在尝试将(Fromdt,Todate)之类的日期从Date到To date之间作为日期。我正在尝试将Emp_no匹配到日期范围

sl.no | Emp_no | Leave_appl_dt | Fromdt |至今no_of_days 1100 1 2020-01-01 2020- 01-01 2020-01-12 12 2 1002 2020-01-10 2020-01-15 2020-01-25 10

leavedt    |  Emp_no | leave_appldt |  
2020-01-01      1001    2020-01-01
2020-01-02.     1001    2020-01-01
.               1001    2020-01-01 
.               .
.               .
.               .
2020-01-12     1001     2020-01-01
2020-01-15     1002     2020-01-10
2020-01-16     1002     2020-01-10
2020-01-17     1002     2020-01-10
2020-01-18     1002     2020-01-10
.              .        . 
.              .        .
2020-01-25     1002     2020-01-10

请任何人可以帮助我解决这个问题

sql date server recursive-query
2个回答
0
投票

一个选项使用递归查询。

假设您正在运行SQL Sever(因为您标记了问题sqlserver,这是SO新手的常见模式,则为:

with leaves as (
    select emp_no, leave_appl_dt, from_dt, to_dt 
    from tbl_monthly_leaves
    union all
    select emp_no, leave_appl_dt, dateadd(day, 1, from_dt), to_dt
    from leaves
    where from_dt < to_dt
)
select from_dt leave_dt, emp_no, leave_appl_dt from leaves

我稍微更改了您的列名,这在示例数据和结果之间是不一致的。

如果您的任何叶子散布超过100天,则需要在查询的最后添加option (maxrecusion 0)


-1
投票

您可以使用数字表:

DECLARE @ Date1 DATE,@ Date2 DATE SET @日期1 ='20150528' SET @ Date2 ='20150531'

SELECT DATEADD(DAY,number+1,@Date1) [Date]
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(DAY,number+1,@Date1) < @Date2
© www.soinside.com 2019 - 2024. All rights reserved.