MySQL SELECT WHERE datetime は日と一致する(必ずしも時刻とは限らない) 質問する

MySQL SELECT WHERE 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

ベストアンサー1

絶対に次のようなセレクターを使用する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'

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

編集

Used_By_Alreadyが指摘したように、2012年の最初の回答以来、MySQLのバージョンが出現し、1日の終わりに「23:59:59」を使用することは安全ではなくなりました。更新されたバージョンでは、

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

答えの要点、つまり計算された式でのセレクターの回避は、もちろん依然として有効です。

おすすめ記事