Vấn đề:
Bạn có hai cột của loại ngày và bạn muốn tính toán sự khác biệt giữa chúng.
Ví dụ:
Trong travel
bảng, có ba cột:id
, departure
và arrival
. Bạn muốn tính toán sự khác biệt giữa arrival
và departure
, hoặc số ngày kể từ khi arrival
khởi hành hoàn toàn.
travel
bảng trông như thế này:
id | khởi hành | đến |
---|---|---|
1 | 2018-03-25 | 2018-04-05 |
2 | 2019-09-12 | 2019-09-23 |
3 | 2018-07-14 | 2018-07-14 |
4 | 2018-01-05 | 2018-01-08 |
Giải pháp:
SELECT id, departure, arrival, DATEDIFF(arrival, departure) AS date_difference, DATEDIFF(arrival, departure) + 1 AS days_inclusive FROM travel;
Kết quả là:
id | khởi hành | đến | date_difference | days_inclusive |
---|---|---|---|---|
1 | 2018-03-25 | 2018-04-05 | 11 | 12 |
2 | 2019-09-12 | 2019-09-23 | 11 | 12 |
3 | 2018-07-14 | 2018-07-14 | 0 | 1 |
4 | 2018-01-05 | 2018-01-08 | 3 | 4 |
Thảo luận:
Để đếm sự khác biệt giữa các ngày trong MySQL, hãy sử dụng DATEDIFF(enddate, startdate)
hàm số. Sự khác biệt giữa startdate
và enddate
được thể hiện bằng ngày. Trong trường hợp này, enddate
là arrival
và startdate
là departure
.
Tuy nhiên, trong hầu hết các trường hợp, điều bạn thực sự muốn là số ngày từ ngày đầu tiên đến ngày thứ hai hoàn toàn . Bạn cần thêm 1 ngày vào khoản chênh lệch:DATEDIFF(arrival, departure) + 1
.