Vấn đề:
Bạn có hai cột thuộc loại timestamp
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
.
travel
bảng trông như thế này:
id | khởi hành | đến |
---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 |
Giải pháp 1 (chênh lệch về ngày, giờ, phút và giây):
SELECT id, departure, arrival, arrival - departure AS difference FROM travel;
Kết quả là:
id | khởi hành | đến | sự khác biệt |
---|---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 | 10 ngày 19:30:00 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 | 40 ngày 18:40:30 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 | 04:25:30 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 | 368 ngày 05:25:00 |
Thảo luận:
Để tính toán sự khác biệt giữa các dấu thời gian trong PostgreSQL, chỉ cần trừ dấu thời gian bắt đầu khỏi dấu thời gian kết thúc. Ở đây, nó sẽ là arrival - departure
. Sự khác biệt sẽ thuộc loại interval
, có nghĩa là bạn sẽ thấy nó theo ngày, giờ, phút và giây.
Giải pháp 2 (chênh lệch năm, tháng, ngày, giờ, phút và giây):
SELECT id, departure, arrival, AGE(arrival, departure) AS difference FROM travel;
Kết quả là:
id | khởi hành | đến | sự khác biệt |
---|---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 | 10 ngày 19:30:00 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 | 1 tháng 10 ngày 18:40:30 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 | 04:25:30 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 | 1 năm 3 ngày 05:25:00 |
Thảo luận:
Nếu bạn muốn nhận sự khác biệt về năm, tháng, ngày, giờ, phút và giây, hãy sử dụng AGE(end, start)
hàm số. Ở đây, nó sẽ là AGE(arrival, departure)
. Trong giải pháp này, cột kết quả cũng thuộc loại interval
.
Giải pháp 3 (chênh lệch tính bằng giây):
SELECT id, departure, arrival, EXTRACT(EPOCH FROM (arrival - departure)) AS difference FROM travel;
id | khởi hành | đến | sự khác biệt |
---|---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 | 934200 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 | 3523230 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 | 15930 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 | 31814700 |
Thảo luận:
Nếu bạn muốn tính toán sự khác biệt giữa các dấu thời gian theo giây trong PostgreSQL, hãy trừ một ngày cho ngày kia (tại đây:arrival - departure
) sau đó giải nén EPOCH
từ sự khác biệt để có được nó trong vài giây. Đây là thông tin thêm về EXTRACT()
chức năng.