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 số ngày):
CHỌN id, khởi hành, đến, JULIANDAY (đến) - JULIANDAY (khởi hành) NHƯ sự khác biệtKế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,8125 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 | 40.778125000186265 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 | 0,18437499972060323 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 | 368.2256944444962 |
Thảo luận:
Để tính toán sự khác biệt giữa các dấu thời gian trong SQLite, hãy sử dụng JULIANDAY()
hàm cho cả hai dấu thời gian, sau đó trừ đi một dấu thời gian. Bằng cách này, bạn sẽ nhận được sự khác biệt trong ngày. Phần nguyên của sự khác biệt là số ngày đầy đủ và phần thập phân đại diện cho một phần ngày.
JULIANDAY()
hàm trả về số ngày kể từ trưa Giờ chuẩn Greenwich vào ngày 24 tháng 11 năm 4714 trước Công nguyên. Bạn có thể đọc thêm về chức năng này trong tài liệu.
Giải pháp 2 (chênh lệch tính bằng giây):
CHỌN id, khởi hành, đến, ROUND ((JULIANDAY (đến) - JULIANDAY (khởi hành)) * 86400) AS differenceFROM du lịch;
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 | 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 chênh lệch giữa các dấu thời gian theo giây, hãy nhân chênh lệch thập phân tính theo ngày với số giây trong ngày, bằng 24 * 60 * 60 = 86400
hoặc tích của số giờ trong ngày, số phút trong một giờ và số giây trong một phút. Vì phần thập phân cho sự khác biệt về ngày không chính xác 100% do lỗi làm tròn, bạn có thể nhận được phần thập phân khác 0. Làm tròn kết quả đến số nguyên gần nhất, sử dụng ROUND()
chức năng, khắc phục sự cố.
Tương tự, bạn có thể tính toán sự khác biệt theo phút hoặc theo giờ. Chỉ cần thay đổi * 86400 to * 3600
(phút) hoặc * 60
(giờ).