我的表presences
包含员工所在的时间范围。该范围具有start
日期和end
日期。
我知道如何通过简单地使用BETWEEN
来选择日期范围内的日期,但我想做的是提供给定的日期范围,例如2022-04-04 to 2022-04-06
,我想获得员工在给定范围内至少一天可用的所有行。
如果presences
表中有一行的开始时间为2022-01-01,结束时间为2022-12-31,这意味着员工每天都在现场,则必须返回该行,因为提供的范围在现场范围内。
另一个例子是,一名员工仅在2022-04-05出现,那么也必须返回此行,因为该员工在提供范围内至少出现过一次。
这是我迄今为止得到的一把小提琴:http://sqlfiddle.com/#!9/2b3506/4
您可以将start
的日期值与查询日期范围的结束日期和end
的日期值进行比较:
SELECT *
FROM presences
WHERE DATE(start) <= '2022-04-06' AND DATE(end) >= '2022-04-04';
请参阅演示
如果列已经是日期类型,则不需要添加DATE
,如果不是日期,则可能需要将其强制转换为日期。但这是可行的:
SELECT *
FROM presences
WHERE start >= '2022-04-04' AND end <= '2022-04-06';