だから、多かれ少なかれ明白なはずの落とし穴に遭遇したかどうか疑問に思っています。
dateField
では、datetimeという名前の DB フィールドがあるとします。また、テーブル内のすべてのレコードに次の値があると仮定しましょう: 2013-10-15 13:15:46
.
ここで、日付範囲内のレコードを抽出したいと考えています。yyyy-mm-dd
Web サイトのフロントエンドでは2013-10-15 ( ) 形式を使用しています。(いいえ、SQL インジェクションは不可能です。PDO を経由します。:D)
select の where ステートメントが次のように挿入されていると仮定しましょう: $select->where('dateField >= ?', $dateFrom); $select->where('dateField <= ?', $dateTo);
したがって、次のような範囲がある場合:
From: 2013-10-10 To: 2013-10-16すべて問題ありません。
しかし、次のような式では: From: 2013-10-15 To: 2013-10-15結果が表示されません! :D
MySQL が私の日付型2013-10-15を2013-10-15 00:00:00に内部的に変換 し、WHERE 句が次のようになると推測しています。
SELECT .... WHERE dateField <= 2013-10-15 00:00:00 AND dateField >= 2013-10-15 00:00:00;
もちろん、この場合、2013-10-15 13:15:46は WHERE 句にはありません。:D:D
の日付部分のみを比較することで、これを既に修正しました:
$select->where('DATE(dateField) >= ?', $dateFrom);
$select->where('DATE(dateField) <= ?', $dateTo);
しかし、私の質問は次のとおりです。
MySQL の内部日付/日時変換 (低レベルの操作) について誰かがもう少し説明できますか?
この質問は、コミュニティ wiki に追加するのに適していますか?