dateとtodateの2つの列を持つテーブルleave_applicationsがあります。休暇の日付が特定の月に該当する行をテーブルから取得する必要があります。つまり、日付から日付までの日付の少なくとも1つが特定の月に該当する行を意味します。
したがって、2つの日付セット(つまり、from_dateとto_date)とその月のすべての日付が交差する行を取得するクエリが必要です。
A<DおよびB>Cの場合、2つの範囲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が月の最初と最後の日と一致する場合に重複すると見なす場合は、<=と>=を使用します。
これらのクエリについては、少し前に書きました。解決策は次のとおりです。
-- 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'