Is there a way in a MySQL statement to order records (through a date stamp) by >= NOW() -1 so all records from the day before today to the future are selected?
Asked
Active
Viewed 4.3e+01k times
7 Answers
414
Judging by the documentation for date/time functions, you should be able to do something like:
SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY

Jon Skeet
- 1,421,763
- 867
- 9,128
- 9,194
-
how to get now to so on.. mean current date to all records those are available in db. ? this is just for one day but i need all record now to on words. @jon – Muddasir Abbas Sep 03 '15 at 07:16
-
Does it consider the user's localtime when the records are in UTC? – Adry Jul 17 '18 at 07:13
-
1@Adry: I doubt it, but you should test carefully. – Jon Skeet Jul 17 '18 at 07:46
79
Be aware that the result may be slightly different than you expect.
NOW()
returns a DATETIME
.
And INTERVAL
works as named, e.g. INTERVAL 1 DAY = 24 hours
.
So if your script is cron'd to run at 03:00
, it will miss the first three hours of records from the 'oldest' day
.
To get the whole day use CURDATE() - INTERVAL 1 DAY
. This will get back to the beginning of the previous day regardless of when the script is run.

Hamza Zafeer
- 2,360
- 13
- 30
- 42

William Dan Terry
- 791
- 5
- 2
25
Didn't see any answers correctly using DATE_ADD
or DATE_SUB
:
Subtract 1 day from NOW()
...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)
Add 1 day from NOW()
...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)

Andrew Atkinson
- 4,103
- 5
- 44
- 48
-
1Looks "cleaner", somehow, but a bit "heavy" as well. Is there really any added value in explicitly calling a method rather than using a simple addition/substraction ? – Balmipour Sep 03 '20 at 12:26
8
Sure you can:
SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)

Marco Miltenburg
- 6,123
- 1
- 29
- 29
1
when search field is timestamp and you want find records from 0 hours yesterday and 0 hour today use construction
MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))
instead
now() - interval 1 day

Michael de Oz
- 27
- 3