SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Cách tính toán sự khác biệt giữa hai dấu thời gian trong SQLite

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 , departurearrival . Bạn muốn tính toán sự khác biệt giữa arrivaldeparture .

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ệt 

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,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ờ).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite - Chèn dữ liệu

  2. Android:SQLite tiết kiệm mảng chuỗi?

  3. Cách sử dụng regexp trong sqlite

  4. SQLite Delete

  5. Cách nhận giá trị tối đa của số nguyên kiểu cột được lưu trữ dưới dạng văn bản kiểu trong bảng sqlite