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(day, departure, arrival) AS date_difference, DATEDIFF(day, departure, arrival) + 1 AS days_inclusive FROM travel;
Kết quả là:
id | khởi hành | đến | date_difference | ngày |
---|---|---|---|---|
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:
Để tìm sự khác biệt giữa các ngày, hãy sử dụng DATEDIFF(datepart, startdate, enddate)
hàm số. datepart
đối số xác định phần ngày / giờ mà bạn muốn thể hiện sự khác biệt. Giá trị của nó có thể là year
, quarter
, month
, day
, minute
, v.v. Trong ví dụ này, bạn muốn thể hiện sự khác biệt về ngày, vì vậy đối số đầu tiên là ngày. Hai đối số khác là ngày bạn bắt đầu đếm và ngày bạn ngừng đếm - Trong trường hợp này, departure
và arrival
, tương ứng.
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 bao gồm . Sau đó, bạn cần thêm 1 ngày vào số ngày chênh lệch:DATEDIFF(day, departure, arrival) + 1
.