SSブログ

クエリ 日付を年月で抽出する [クエリ]

 日付の項目に対して、例えば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などは、インデックスなどにより、検索効率を上げる事ができるため、より高速に処理できる可能性があります。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。