このような比較では、日時を「ゼロからの月数」に変換するのが好きです。あなた、算数だけで計算できるってこと。
クエリの場合、これは次のようになります。
select t.*, year(compdate), month(compdate)
from t cross join
(select date('2013-07-01') as compdate) const
where year(compdate)*12+month(compdate) between year(dtBeg)*12 + month(dtBeg) and
year(dtEnd)*12 + month(dtEnd);
compdate
ここでは、サブクエリに入れました。そうすれば、複数の月をチェックしたい場合は、テーブルに行を追加するだけです:
select t.*, year(compdate), month(compdate)
from t cross join
(select date('2013-07-01') as compdate union all
select date('2013-08-01')
) const
where year(compdate)*12+month(compdate) between year(dtBeg)*12 + month(dtBeg) and
year(dtEnd)*12 + month(dtEnd);
この形式は、多くの SQL ダイアレクトで機能します。を使用して、MySQL 固有の関数で同様のことを行うことができますdate_format()
。
select t.*, year(compdate), month(compdate)
from t cross join
(select '2013-07' as compdate union all
select '2013-08'
) const
where compdate between date_format(dtBeg, '%Y-%m') and date_format(dtEnd, '%Y-%m)