- ベストアンサー
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' →これでも大丈夫なようですが、他の表現方法がありましたら是非アドバイス宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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'などデータを埋め込んでおくのが 効率的です
その他の回答 (3)
- nda23
- ベストアンサー率54% (777/1415)
yambejpさんの意見に賛成です。 WHWRE A >= 1 AND A<=10 WHERE A BETWEEN 1 AND 10 結果は同じですが、後者の方が僅かに効率的です。 何故かと言うと、Aの評価が前者は2回、後者は1回 だからです。今時の高速マシンで、DBエンジンの 最適化も発達した現在では殆ど差異は無いのですが、 昔の遅いマシン、アホなDBエンジンでやっていた頃は こういうことに神経を使いました。 ただ、DBの検索が複雑になり、件数も多くなると、 細かい積み重ねが大きな結果になって表れることも ありますので、記憶に留められたほうがよいでしょう。
- nda23
- ベストアンサー率54% (777/1415)
BETWEEN の指定値は「含まれる」です。 2010-02-28 23:59:59 は範囲に含まれます。 2010-03-01 00:00:00 は範囲に含まれません。 抜けは生じません。
>これだと59から00の1秒が抜ける様に思いますが、認識違いでしょうか? 仰る通りです。 2番目の表現がシンプルでよいと思います。
お礼
皆様、ご回答ありがとうございます。 大変参考になりました。有難く思っています。