2012-11-19 24 views
9

Tôi đang cố gắng chọn các hàng trong 2 giờ qua. Đối với một số lý do nó không hoạt động. Cú pháp mã trông ok và hoạt động khi được sử dụng trên các bảng khác, nhưng vì một số lý do khi được sử dụng trên bảng Posts, hãy nhận các hàng cũ hơn 2 giờ.DATETIME chọn các hàng từ 2 giờ qua

SELECT * FROM Posts WHERE `Date` > SUBDATE(CURRENT_DATE, INTERVAL 2 HOUR) 

Có vấn đề gì với mã không? Có cách nào khác để viết nó không? Điều gì có thể là lý do cho điều này?

+0

'CURRENT_DATE' không có thời gian để trừ khi bạn trừ đi 2 giờ trừ đi nửa đêm. kiểm tra câu trả lời của tôi. –

Trả lời

6

Đó là bởi vì bạn đang sử dụng CURRENT_DATE, bạn nên sử dụng NOW() hoặc CURRENT_TIMESTAMP để thay thế.

Vấn đề là sử dụng CURRENT_DATE, là một giá trị ngày tháng, giá trị mặc định thời gian để 00:00:00, vì vậy bằng cách trừ đi 2 giờ bạn kết thúc nhận 22:00:00 của ngày hôm trước, thay vì 2 giờ qua ...

6

thay đổi này:

SELECT * FROM Posts WHERE `Date` > SUBDATE(CURRENT_TIMESTAMP, INTERVAL 2 HOUR) 
16

Bạn có thể sử dụng ký hiệu đơn giản:

SELECT * FROM Posts WHERE `Date` > NOW() - INTERVAL 2 HOUR 
1

Bạn có thể dùng thử số này

SELECT * FROM Posts WHERE `Date` > DATE_SUB(CURDATE(), INTERVAL 3 HOUR) 
Các vấn đề liên quan