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