PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara Menghitung Perbedaan Antara Dua Timestamp di PostgreSQL

Masalah:

Anda memiliki dua kolom dengan tipe timestamp dan Anda ingin menghitung perbedaan di antara keduanya.

Contoh:

Dalam travel tabel, ada tiga kolom:id , departure , dan arrival . Anda ingin menghitung selisih antara arrival dan departure .

travel tabel terlihat seperti ini:

id keberangkatan kedatangan
1 25-03-2018 12:00:00 05-04-2018 07:30:00
2 2019-09-12 15:50:00 23-10-2019 10:30:30
3 14-07-2018 16:15:00 14-07-2018 20:40:30
4 05-01-2018 08:35:00 08-01-2019 14:00:00

Solusi 1 (perbedaan hari, jam, menit, dan detik):

SELECT
  id,
  departure,
  arrival,
  arrival - departure AS difference
FROM travel;

Hasilnya adalah:

id keberangkatan kedatangan perbedaan
1 25-03-2018 12:00:00 05-04-2018 07:30:00 10 hari 19:30:00
2 2019-09-12 15:50:00 23-10-2019 10:30:30 40 hari 18:40:30
3 14-07-2018 16:15:00 14-07-2018 20:40:30 04:25:30
4 05-01-2018 08:35:00 08-01-2019 14:00:00 368 hari 05:25:00

Diskusi:

Untuk menghitung perbedaan antara stempel waktu di PostgreSQL, cukup kurangi stempel waktu mulai dari stempel waktu akhir. Di sini, itu adalah arrival - departure . Perbedaannya terletak pada jenis interval , yang berarti Anda akan melihatnya dalam hitungan hari, jam, menit, dan detik.

Solusi 2 (selisih tahun, bulan, hari, jam, menit, dan detik):

SELECT
  id,
  departure,
  arrival,
  AGE(arrival, departure) AS difference
FROM travel;

Hasilnya adalah:

id keberangkatan kedatangan perbedaan
1 25-03-2018 12:00:00 05-04-2018 07:30:00 10 hari 19:30:00
2 2019-09-12 15:50:00 23-10-2019 10:30:30 1 sen 10 hari 18:40:30
3 14-07-2018 16:15:00 14-07-2018 20:40:30 04:25:30
4 05-01-2018 08:35:00 08-01-2019 14:00:00 1 tahun 3 hari 05:25:00

Diskusi:

Jika Anda ingin mendapatkan perbedaan dalam tahun, bulan, hari, jam, menit, dan detik, gunakan AGE(end, start) fungsi. Di sini, itu akan menjadi AGE(arrival, departure) . Dalam solusi ini, kolom yang dihasilkan juga bertipe interval .

Solusi 3 (selisih dalam hitungan detik):

SELECT
  id,
  departure,
  arrival,
  EXTRACT(EPOCH FROM (arrival - departure)) AS difference
FROM travel;
id keberangkatan kedatangan perbedaan
1 25-03-2018 12:00:00 05-04-2018 07:30:00 934200
2 2019-09-12 15:50:00 23-10-2019 10:30:30 3523230
3 14-07-2018 16:15:00 14-07-2018 20:40:30 15930
4 05-01-2018 08:35:00 08-01-2019 14:00:00 31814700

Diskusi:

Jika Anda ingin menghitung perbedaan antara stempel waktu dalam detik di PostgreSQL, kurangi satu tanggal dari tanggal lainnya (di sini:arrival - departure ) lalu ekstrak EPOCH dari perbedaan untuk mendapatkannya dalam hitungan detik. Berikut selengkapnya tentang EXTRACT() fungsi.


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. Evolusi Fault Tolerance di PostgreSQL

  2. Format keluaran alternatif untuk psql

  3. PostgreSQL DISTINCT ON dengan ORDER BY yang berbeda

  4. Fitur Tersembunyi PostgreSQL

  5. Bagaimana mengevaluasi ekspresi dalam pernyataan pilih di Postgres