質問があります:1つのDATE文字列 "2010-04-29"をDATETIME(2010-04-29 10:00)として保存されている文字列と比較することで、MySQLデータベースから選択できますか?
データをフィルタリングする日付ピッカーが1つあり、次のようにDATETIMEフィールドでテーブルをクエリしたいと思います。
SELECT * FROM `calendar` WHERE startTime = '2010-04-29'"
...そして、「2010-04-29 10:00」のDATETIME値を持つ行を取得したいと思います。
助言がありますか?ありがとう。
以下を使用してください。
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
参考のために、200万件のレコードテーブルがあり、同様のクエリを実行しました。 Salilsの回答には4.48秒かかり、上記には2.25秒かかりました。
テーブルが大きい場合は、むしろこれをお勧めします。
DATETIME列のDATE部分が特定のリテラルと一致するすべての行を選択する場合、次のようにすることはできません。
WHERE startTime = '2010-04-29'
mySQLはDATEとDATETIMEを直接比較できないためです。 MySQLは、指定されたDATEリテラルを時間「00:00:00」で拡張します。あなたの状態は
WHERE startTime = '2010-04-29 00:00:00'
確かにあなたが望むものではありません!
条件は範囲であるため、範囲として指定する必要があります。いくつかの可能性があります。
WHERE startTime BETWEEN '2010-04-29 00:00:00' AND '2010-04-29 23:59:59'
WHERE startTime >= '2010-04-29' AND startTime < ('2010-04-29' + INTERVAL 1 DAY)
最初の値が間違っている可能性がわずかにあります-DATETIME列がサブセカンド解像度を使用し、23:59:59 + epsilonで予定がある場合。一般に、2番目のバリアントを使用することをお勧めします。
どちらのバリアントも、テーブルが大きくなると重要になるstartTimeのインデックスを使用できます。
SELECT * FROM `calendar` WHERE DATE_FORMAT(startTime, "%Y-%m-%d") = '2010-04-29'"
OR
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
SELECT * FROM sample_table WHERE last_visit = DATE_FORMAT('2014-11-24 10:48:09','%Y-%m-%d %H:%i:%s')
これは、DATE_FORMAT(date,format)
を使用したmysqlの日時形式用です。
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29';
比較する前に、値をDATE
として変換できます。