MySQL: Cách thêm một ngày vào trường datetime trong truy vấn


78

Trong bảng của tôi, tôi có một trường có tên eventdatedatetimeđịnh dạng như 2010-05-11 00:00:00.

Làm cách nào để tôi thực hiện một truy vấn để nó thêm một ngày vào eventdateví dụ: nếu hôm nay là 2010-05-11, tôi muốn hiển thị trong wheremệnh đề để trả về tất cả các bản ghi có ngày của ngày mai.

Cập nhật:

Tôi đã thử điều này:

select * from fab_scheduler where custid = 1334666058 and DATE_ADD(eventdate, INTERVAL 1 DAY)

Nhưng thật không may, nó trả về cùng một bản ghi ngay cả khi tôi thêm một khoảng lớn hơn 1.

Kết quả:

2010-05-12 00:00:00

Nhưng tôi chỉ muốn chọn các bản ghi có ngày mai.

Câu trả lời:


142

Bạn có thể sử dụng DATE_ADD()chức năng:

... WHERE DATE(DATE_ADD(eventdate, INTERVAL -1 DAY)) = CURRENT_DATE

Nó cũng có thể được sử dụng trong SELECTcâu lệnh:

SELECT DATE_ADD('2010-05-11', INTERVAL 1 DAY) AS Tomorrow;
+------------+
| Tomorrow   |
+------------+
| 2010-05-12 |
+------------+
1 row in set (0.00 sec)

1
@phpBOY: Tôi nghĩ bạn đã bỏ lỡ phần `= CURRENT_DATE`.
Daniel Vassallo

tôi đã thử điều này select * from fab_scheduler where custid = 1334666058 and DATE(DATE_ADD(eventdate, INTERVAL 1 DAY)) = CURRENT_DATE nhưng bây giờ nó trả về tập kết quả trống :(

1
Cá nhân tôi sẽ sử dụng CURDATE ()
David Yell,

@phpBOY: Bạn nói đúng. Bạn phải sử dụng -1để phù hợp với CURRENT_DATE. Hãy thử với truy vấn cập nhật.
Daniel Vassallo

@Daniel Vassallo: Bạn có thể tạo truy vấn không, tôi đang nhận được bộ hồ sơ trống. Cảm ơn

7

Hãy thử với điều này, vì đây là cách tôi sẽ làm điều đó :)

SELECT * 
FROM fab_scheduler
WHERE custid = '123456'
AND CURDATE() = DATE(DATE_ADD(eventdate, INTERVAL 1 DAY))

1
Tôi không nghĩ rằng điều đó có thể hoạt động. eventdatesẽ không bao giờ bằng eventdate + 1 day. Tôi nghĩ rằng bạn có ý định sử dụng CURDATE()trong đó.
Daniel Vassallo

5

Có thể sử dụng đường cú pháp cụ thể của MySQL:

SELECT ... date_field + INTERVAL 1 DAY

Trông đẹp hơn nhiều thay vì hàm DATE_ADD


1

Nếu bạn có thể sử dụng NOW (), đây sẽ là biểu mẫu đơn giản nhất:

SELECT * FROM `fab_scheduler` WHERE eventdate>=(NOW() - INTERVAL 1 DAY)) AND eventdate<NOW() ORDER BY eventdate DESC;

Với MySQL 5.6+ truy vấn abowe nên làm. Tùy thuộc vào máy chủ sql, Bạn có thể được yêu cầu sử dụng CURRDATE()thay vì NOW()- là bí danh DATE(NOW())và sẽ chỉ trả về phần ngày tháng của datetimekiểu dữ liệu;


0

Còn cái này thì sao: 

select * from fab_scheduler where custid = 1334666058 and eventdate = eventdate + INTERVAL 1 DAY

0

Bạn có thể thử điều này:

SELECT DATE(DATE_ADD(m_inv_reqdate, INTERVAL + 1 DAY)) FROM  tr08_investment

-3
$date = strtotime(date("Y-m-d", strtotime($date)) . " +1 day");

Hoặc, đơn giản hơn:

date("Y-m-d H:i:s", time()+((60*60)*24));

Bạn đã không tính vào thời gian tiết kiệm ánh sáng ban ngày. mktime sẽ tốt hơn.
Vili
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.