1

我有一个表 leave_applications ,其中包含从 date 到 date 的两列。我需要从表中获取休假日期在给定月份的那些行,这意味着从日期到日期之间的至少一个日期在给定月份中的行。

因此,我需要一个查询来获取具有两组日期(即 from_date 和 to_date)和该月所有日期的交集的行。

4

2 回答 2

1

如果 A < D 和 B > C,则两个范围 AB 和 CD 重叠。在伪 SQL 中,

select * from leave_applications where 
from_date < (last day of month) AND to_date > (first day of month)

如果 from_date 或 to_date 与该月的第一天和最后一天重合,则使用 <= 和 >= 如果您认为它是重叠的。

于 2012-12-06T11:21:46.937 回答
0

我前段时间写过这些查询。这是解决方案:

-- 2.2) select date ranges that overlap [d1, d2] (d2 and end_date are inclusive)
SELECT * FROM <table> WHERE @d2 >= start_date AND end_date >= @d1

所以如果你想检查 2012 年 12 月的叶子,你应该写:

SELECT * FROM leave_applications
WHERE '2012-12-31' >= from_date AND to_date >= '2012-12-01'
于 2012-12-06T11:34:37.873 回答