• ベストアンサー

MySQLの日付について教えて頂けませんでしょうか。

MySQLの日付について教えて頂けませんでしょうか。 月間のデータを抽出しようと思うのですが between '2010-02-01' and '2010-02-28 23:59:59' →これだと59から00の1秒が抜ける様に思いますが、認識違いでしょうか? reg_date >= '2010-02-01' AND reg_date < '2010-3-01' →これでも大丈夫なようですが、他の表現方法がありましたら是非アドバイス宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

reg_dateがdate型であれば between reg_data '2010-02-01' and '2010-02-28'で十分 datetime型なら between reg_data '2010-02-01 00:00:00' and '2010-02-28 23:59:59'で十分 なお、月末日じたいは当月の1日の1か月後の1日前なのでたとえば set @theday='2010-02-10'; select date_format(@theday,'%Y-%m-01') +interval 1 month - interval 1 day; とあらわせます。 経験的にbetweenの方が効率的に処理ができると思います。 また、月の売上集計が頻繁にあるのであれば、最初から レコードごとに'201002'などデータを埋め込んでおくのが 効率的です

fabu
質問者

お礼

皆様、ご回答ありがとうございます。 大変参考になりました。有難く思っています。

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

yambejpさんの意見に賛成です。 WHWRE A >= 1 AND A<=10 WHERE A BETWEEN 1 AND 10 結果は同じですが、後者の方が僅かに効率的です。 何故かと言うと、Aの評価が前者は2回、後者は1回 だからです。今時の高速マシンで、DBエンジンの 最適化も発達した現在では殆ど差異は無いのですが、 昔の遅いマシン、アホなDBエンジンでやっていた頃は こういうことに神経を使いました。 ただ、DBの検索が複雑になり、件数も多くなると、 細かい積み重ねが大きな結果になって表れることも ありますので、記憶に留められたほうがよいでしょう。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

BETWEEN の指定値は「含まれる」です。 2010-02-28 23:59:59 は範囲に含まれます。 2010-03-01 00:00:00 は範囲に含まれません。 抜けは生じません。

noname#111181
noname#111181
回答No.1

>これだと59から00の1秒が抜ける様に思いますが、認識違いでしょうか? 仰る通りです。 2番目の表現がシンプルでよいと思います。

関連するQ&A