如何获取start_date和end_date之间的所有日期,包括start_date和end_date?
但不是那些不在该范围内的日期。
例如:08-01-2020不应出现在输出中,因为它不在任何work_id日期范围内 因此,2020年8月1日是不工作日期之一
所以我想要除非工作日期以外的所有日期。
样本输出: 要么这个
或这个
答案 0 :(得分:0)
首先,您应该创建一个表值函数,该函数为表中的每个条目生成日期列表
cd ~/catkin_ws/src/
git clone https://github.com/ahornung/humanoid_msgs.git
cd ../
catkin_make
然后您可以将此功能与交叉应用一起使用
CREATE FUNCTION DatesByRange(@start_date date, @end_date date)
RETURNS @Dates TABLE
(
Dates date
)
AS
BEGIN
WITH cteDateRanges AS
(
SELECT @start_date AS workday
UNION ALL
SELECT DATEADD(DAY, 1, workday) FROM cteDateRanges
WHERE workday < @end_date
)
INSERT INTO @Dates
SELECT workday FROM cteDateRanges
RETURN;
END;
答案 1 :(得分:0)
创建目标范围日期列表,向列表中添加工作和非工作标志,然后按标志进行过滤。 您可以通过以下查询获得预期的输出。
-- 1st, generate a list of dates
with dates as (
select min(start_date) as dates, max(end_date) as max_date from dates_range
union all
select dateadd(day, 1, dates), max_date from dates
where dates < max_date
),
-- 2nd, generate a list of dates with working/non working flag
all_dates as (
select distinct
d1.dates,
case when d2.work_id is not null then 'true' else 'false' end as working
from dates as d1 left outer join dates_range as d2
on d1.dates between d2.start_date and d2.end_date
)
-- 3rd, filter either that working is true or false
select dates as Non_working_dates from all_dates where working = 'false';