2013-03-25 69 views
9

Nếu tôi có một ngày như thế này:MySQL chọn ngày hôm qua

'2013-03-25' 

Và tôi muốn viết một truy vấn với WHERE MySQL là "ngày hôm qua", làm thế nào để làm điều đó?

+0

Bản sao có thể có của [MySQL chọn ngày hôm qua] (http://stackoverflow.com/questions/7146828/mysql-selecting-yesterdays-date) – derobert

Trả lời

16

Một cách đơn giản để có được ngày hôm qua là sử dụng subdate() chức năng:

subdate(currentDate, 1) 
26

này nên làm điều đó:

WHERE `date` = CURDATE() - INTERVAL 1 DAY 
+0

Điều gì xảy ra nếu nó sớm hơn một phút so với thời gian hiện tại? – SLaks

+0

Tôi không chắc chắn những gì bạn đang nhận được. Bạn có thể làm rõ được không? –

+1

Nếu đó là 'curdate()', không phải là 'now()'? AFAIK, mã của bạn sẽ chỉ hoạt động nếu thời gian trong ngày khớp chính xác – SLaks

1

Tôi luôn luôn phải tham khảo một đoạn mã để quấn quanh đầu của tôi một lần nữa.

Đó là phong tục để lưu trữ thời gian biểu trong UTC trong cơ sở dữ liệu. Nhưng thông thường, khi tạo báo cáo, thời gian cần phải được điều chỉnh cho một múi giờ cụ thể.

Sau đây là đoạn tôi sử dụng để hiển thị lựa chọn ngày hôm qua, điều chỉnh cho giờ Thái Bình Dương:

SET @date_start = DATE_SUB((CURDATE() - INTERVAL 1 DAY), INTERVAL 8 HOUR); 
SET @date_end = DATE_SUB(CURDATE(), INTERVAL 8 HOUR); 

SELECT 
    projects.token, 
    projects.created_at as 'UTC created_at', 
    DATE_SUB(projects.created_at, INTERVAL 8 HOUR) as 'Pacific created_at' 
FROM 
    projects 
WHERE 
    projects.created_at BETWEEN @date_start AND @date_end; 

Lưu ý: tôi đặt các biến trong đoạn vì vậy nó dễ dàng hơn để xem xét. Khi tôi viết truy vấn cuối cùng, tôi thường không sử dụng các biến.

Các vấn đề liên quan