Chọn hồ sơ từ NOW () -1 ngày


138

Có cách nào trong câu lệnh MySQL để sắp xếp các bản ghi (thông qua dấu ngày) bằng cách> = NOW () -1 để tất cả các bản ghi từ ngày trước hôm nay đến tương lai được chọn không?

Câu trả lời:


268

Đánh giá theo tài liệu về các chức năng ngày / giờ , bạn sẽ có thể làm một cái gì đó như:

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

làm thế nào để có được ngay bây giờ .. có nghĩa là ngày hiện tại cho tất cả các bản ghi có sẵn trong db. ? Điều này chỉ trong một ngày nhưng tôi cần tất cả các bản ghi ngay bây giờ để nói. @jon
Muddasir Abbas

Nó có xem xét thời gian địa phương của người dùng khi các hồ sơ ở UTC không?
Adry

1
@Adry: Tôi nghi ngờ điều đó, nhưng bạn nên kiểm tra cẩn thận.
Jon Skeet

62

Hãy lưu ý rằng kết quả có thể hơi khác so với bạn mong đợi.

NOW()trả về a DATETIME.

INTERVALhoạt động như được đặt tên, ví dụ INTERVAL 1 DAY = 24 hours.

Vì vậy, nếu tập lệnh của bạn được chạy theo 03:00, nó sẽ bỏ lỡ first three hours of records from the 'oldest' day.

Để có được cả ngày sử dụng CURDATE() - INTERVAL 1 DAY. Điều này sẽ trở lại từ đầu ngày hôm trước bất kể khi nào kịch bản được chạy.


Bỏ phiếu cho HIỆN TẠI ()
cướp



7

Không thấy bất kỳ câu trả lời chính xác bằng cách sử dụng DATE_ADDhoặc DATE_SUB:

Trừ đi 1 ngày từ NOW()

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

Thêm 1 ngày từ NOW()

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

1

khi trường tìm kiếm là dấu thời gian và bạn muốn tìm bản ghi từ 0 giờ hôm qua và 0 giờ hôm nay sử dụng xây dựng

MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))  

thay thế

 now() - interval 1 day
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.