web-dev-qa-db-ja.com

NOW()-1日からレコードを選択

MySQLステートメントに> = NOW()-1で(日付スタンプを使用して)レコードを並べ替える方法はありますか?今日の前日から未来までのすべてのレコードが選択されますか?

104
user1092780

日付/時刻関数のドキュメント から判断すると、次のようなことができるはずです。

SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
205
Jon Skeet

結果は予想とは少し異なる場合があることに注意してください。

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を使用します。これは、スクリプトがいつ実行されるかに関係なく、前日の初めに戻ります。

47

あなたはほとんどそこにいます:それはNOW() - INTERVAL 1 DAYです

14
dasblinkenlight

もちろんできます:

SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
7

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)
1
Andrew Atkinson

検索フィールドがタイムスタンプで、昨日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
0
Michael de Oz