次のクエリ:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')
何も返しません。
クエリが機能するのに十分なデータが必要です。何が悪いのですか?
次のクエリ:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')
何も返しません。
クエリが機能するのに十分なデータが必要です。何が悪いのですか?
回答:
2番目の日付が最初の日付より前です(つまり、2010年9月29日から2010年1月30日の間にクエリを実行しています)。日付の順序を逆にしてみてください:
SELECT *
FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
where句はselector updateステートメントで同じように機能する必要があります。
DATE()は、日付または日付/時刻式の日付部分のみを抽出するMySQL関数です
SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10';
@sabinからの回答の拡張と、日付部分のみ(時間なし)を比較したい場合のヒント:
比較するフィールドがdatetimeタイプのものであり、比較のために日付のみが指定されている場合、これらの日付は内部的にdatetime値に変換されます。つまり、次のクエリ
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30' AND '2010-09-29')
に変換されます
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30 00:00:00' AND '2010-09-29 00:00:00')
内部的に。
これにより、結果として、時間値が00:00:00より大きい2010-09-29のオブジェクトが含まれない結果になります。
したがって、日付が2010-09-29のすべてのオブジェクトも含める必要がある場合は、比較するフィールドを日付に変換する必要があります。
SELECT * FROM `objects` WHERE (DATE(date_time_field) BETWEEN '2010-01-30' AND '2010-09-29')
以上または以下と比較することにより、手動で行うことができます。
select * from table_name where created_at_column >= lower_date and created_at_column <= upper_date;
この例では、特定の日からデータを取得する必要があります。当日の初めから別の日の最後の秒までを比較します。
select * from table_name where created_at_column >= '2018-09-01 00:00:00' and created_at_column <= '2018-09-05 23:59:59';
サーバー側またはクライアント側の日付構成に問題がある可能性があります。ホストがスペイン語、フランス語などで構成されている場合、複数のデータベースでこれが一般的な問題であることがわかりました...形式dd / mm / yyyyまたはmm / dd / yyyyに影響する可能性があります。
min及びmax値が範囲内にあると考えられるのいずれかで二回日付を処理しないこと、minおよびmax値(エッジケース)。たとえば、日付は2010-09-29 00:00:00なり間2010-09-28 00:00:00と2010-09-29 00:00:00、も の間2010-09-29 00:00:00、および2010-09-30 00:00:00