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

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

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 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.


No
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để sửa đổi các trường bên trong kiểu dữ liệu PostgreSQL JSON mới?

  2. Làm cách nào để khởi động PostgreSQL trên Windows?

  3. Quản lý đóng băng trong PostgreSQL

  4. Bất kỳ nhược điểm nào của việc sử dụng văn bản kiểu dữ liệu để lưu trữ chuỗi?

  5. Cách đánh dấu nr hàng nhất định trong bảng khi truy cập đồng thời