我有一个名为tbl_monthly_leave的表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
在上表中,我试图将介于(Fromdt Todate)之类的日期从Date到To date作为日期
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 Sever(因为您标记了问题sql
和server
,这是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)
。
您可以使用数字表:
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