如何选择某些日期在给定范围内的日期



我的表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';

相关内容

  • 没有找到相关文章

最新更新