我有一个表leave_applications,从日期和日期开始有两列。我需要从表中获取那些在给定月份中保留日期的行,表示从日期到日期之间至少有一个日期落在给定月份的行。
因此,我需要一个查询,它将获得具有两组日期(即from_date和to_date)和该月所有日期的交集的行。
答案 0 :(得分:1)
如果A ,则A-B和C-D两个范围重叠。 D和B> C.在伪SQL中,
select * from leave_applications where
from_date < (last day of month) AND to_date > (first day of month)
如果您认为如果from_date或to_date与该月的第一天和最后一天重合,则使用&lt; =和&gt; =如果它是重叠的。
答案 1 :(得分:0)
前一段时间我wrote about these queries。这是解决方案:
-- 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'