1. ホーム
  2. mysql

[解決済み] MySQL SELECT WHERE datetime matches day (and not necessarily time)

2022-05-10 16:01:53

質問

私はdatetimeカラムを含むテーブルを持っています。 私は時間に関係なく、指定された日のすべてのレコードを返したい。 言い換えれば、私のテーブルが次の4つのレコードだけを含んでいた場合、私が2012-12-25に制限する場合、2番目と3番目のレコードだけが返されるでしょう。

2012-12-24 00:00:00
2012-12-25 00:00:00
2012-12-25 06:00:00
2012-12-26 05:00:00

どのように解決するのですか?

絶対に のようなセレクタを使用します。 DATE(datecolumns) = '2012-12-24' - のようなセレクタはパフォーマンスキラーです。

  • を計算します。 DATE() にマッチしない行を含むすべての行に対して
  • クエリにインデックスを使用することが不可能になります。

を使用する方がはるかに高速です。

SELECT * FROM tablename 
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'

とすることで、計算せずにインデックスを使用できるようになります。

EDIT

Used_By_Already が指摘したように、2012 年の最初の回答から時間が経ち、終日として '23:59:59' を使用することがもはや安全ではない MySQL のバージョンが出現しています。更新されたバージョンでは、次のように表示されます。

SELECT * FROM tablename 
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'

回答の要点、つまり計算式のセレクタを避けることは、もちろんまだ有効です。