如何 select 某些日期范围在给定范围内的日期?

How to select dates where some dates of range are in given range?

我的 table presences 包含员工在场的时间范围。该范围有一个 start 日期和 end 个日期。

我知道如何 select 一个日期范围内的日期,只需使用 BETWEEN 但是,我想做的是提供一个给定的日期范围,例如2022-04-04 to 2022-04-06 并且我想获取员工在给定范围内至少一天有空的所有行。

presences table 有开始时间为 2022-01-01 结束时间为 2022-12-31 的行时,这意味着员工 每天,则必须返回该行,因为提供的范围在存在范围内。

另一个例子,员工只在 2022-04-05 上班,那么这一行也必须返回,因为员工在提供范围内至少出现一次。

这是我目前得到的 fiddle: http://sqlfiddle.com/#!9/2b3506/4

您可以将start的日期值与结束日期进行比较,将end的日期值与查询的日期范围的开始日期进行比较:

SELECT *
FROM presences
WHERE DATE(start) <= '2022-04-06' AND DATE(end) >= '2022-04-04';

参见demo

如果该列已经是日期类型,则不需要添加 DATE,也许,如果不是日期,则需要将其转换为日期。但这行得通:

SELECT *
FROM presences
WHERE start >= '2022-04-04' AND end <= '2022-04-06';