クエリ 日付を年月で抽出する [クエリ]
日付の項目に対して、例えば2011年11月の日付を抽出する、と言った条件で抽出する場合、どのようにWHERE条件を作成するのが良いでしょうか?
単純に考えると、たぶんこうなると思います。
日付 BETWEEN #2011/11/01# AND #2011/11/30#
私的には、これが正解だと思ってます。
ただ、ここでひとつ、知っているかいないかの問題なんですが、つまずく所があります。
月末日付をどうやって得るか、です。
頭の固い方はあれこれ考えてしまうかも知れませんが、「日付型」の項目に対しては、この例であれば、2011年12月1日-1、で求められます。
プログラムを作る時の話になりますが、月の最初の日付は必ず「1日」なので、その日付を作るのは簡単です。
月末日付は、月によって変わるので、ずばりその日付を求めようとすると難しくなります。
月末日付というのは、その次の月の、1日の1日前ということになります。つまり、次の月の1日から1日を引き算すれば良いことになります。日付型ではこういった計算が可能です。
月末日付を求めないで、年月で抽出するとしたら、下記のような方法が考えられます。
FORMAT(日付,'YYYYMM') = '201111'
これでも結果は正しいのですが、処理効率の面から言うと、よろしくありません。
WHERE条件の中で、FORMAT(テーブル項目,'YYYYMM')のような記述をすると、データベースは、対象テーブルの全レコードに対して、この関数を処理しなければならなくなります。つまり、データ量が増えれば増えるほど、処理に時間がかかる事になります。
これに対して、BETWEENなどは、インデックスなどにより、検索効率を上げる事ができるため、より高速に処理できる可能性があります。
コメント 0