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


138

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

回答:


269

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

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

今すぐ取得する方法など。dbで使用可能なすべてのレコードの現在の日付を意味します。?これは1日だけですが、今はすべての記録を言葉にする必要があります。@jon
Muddasir Abbas

レコードがUTCの場合、ユーザーの現地時間を考慮しますか?
18

1
@アドリー:私はそれを疑いますが、慎重にテストする必要があります。
Jon Skeet、2018

62

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

NOW() を返す DATETIME

そしてINTERVAL名前のとおりに動作します、例えばINTERVAL 1 DAY = 24 hoursます。

したがって、スクリプトをで実行するようにcron化する03:00と、first three hours of records from the 'oldest' day

終日使用するにはを使用しますCURDATE() - INTERVAL 1 DAY。これは、スクリプトがいつ実行されたかに関係なく、前日の初めに戻ります。


CURDATE()のための投票アップ
ロブ・



8

DATE_ADDまたはを使用して回答が正しく表示されなかったDATE_SUB

から1日を引く NOW()

...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)

から1日を追加 NOW()

...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)

1

検索フィールドがタイムスタンプで、昨日の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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.