MySQLステートメントに> = NOW()-1で(日付スタンプを使用して)レコードを並べ替える方法はありますか?今日の前日から未来までのすべてのレコードが選択されますか?
日付/時刻関数のドキュメント から判断すると、次のようなことができるはずです。
SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
結果は予想とは少し異なる場合があることに注意してください。
NOW()
はDATETIME
を返します。
そしてINTERVAL
は名前付きとして機能します。 INTERVAL 1 DAY = 24 hours
。
したがって、スクリプトが03:00
で実行されるようにcronされている場合、first three hours of records from the 'oldest' day
が欠落します。
1日を取得するには、CURDATE() - INTERVAL 1 DAY
を使用します。これは、スクリプトがいつ実行されるかに関係なく、前日の初めに戻ります。
あなたはほとんどそこにいます:それはNOW() - INTERVAL 1 DAY
です
もちろんできます:
SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
DATE_ADD
またはDATE_SUB
を使用して、回答が正しく表示されませんでした:
NOW()
から1日を引く
...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)
NOW()
から1日追加
...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)
検索フィールドがタイムスタンプで、昨日0時間から今日0時間までのレコードを検索する場合は、構築を使用します
MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))
代わりに
now() - interval 1 day