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 (selisih dalam hari):
SELECT id, departure, arrival, JULIANDAY(arrival) - JULIANDAY(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,8125 |
2 | 2019-09-12 15:50:00 | 23-10-2019 10:30:30 | 40.778125000186265 |
3 | 14-07-2018 16:15:00 | 14-07-2018 20:40:30 | 0.18437499972060323 |
4 | 05-01-2018 08:35:00 | 08-01-2019 14:00:00 | 368.2256944444962 |
Diskusi:
Untuk menghitung perbedaan antara cap waktu di SQLite, gunakan JULIANDAY()
fungsi untuk kedua cap waktu, lalu kurangi satu dari yang lain. Dengan cara ini, Anda mendapatkan perbedaan dalam beberapa hari. Bagian bilangan bulat dari selisih adalah jumlah hari penuh, dan bagian desimal mewakili sebagian hari.
JULIANDAY()
fungsi mengembalikan jumlah hari sejak tengah hari Waktu Rata-Rata Greenwich pada 24 November 4714 SM. Anda dapat membaca lebih lanjut tentang fungsi ini di dokumentasi.
Solusi 2 (selisih dalam hitungan detik):
SELECT id, departure, arrival, ROUND((JULIANDAY(arrival) - JULIANDAY(departure)) * 86400) AS difference FROM travel;
Hasilnya adalah:
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 selisih antara stempel waktu dalam detik, kalikan selisih desimal dalam hari dengan jumlah detik dalam sehari, yang sama dengan 24 * 60 * 60 = 86400
, atau produk dari jumlah jam dalam sehari, jumlah menit dalam satu jam, dan jumlah detik dalam satu menit. Karena bagian desimal untuk perbedaan hari tidak 100% akurat karena kesalahan pembulatan, Anda mungkin mendapatkan bagian desimal bukan nol. Membulatkan hasilnya ke bilangan bulat terdekat, menggunakan ROUND()
fungsi, memperbaiki masalah.
Demikian pula, Anda dapat menghitung perbedaan dalam menit atau jam. Cukup ubah * 86400 to * 3600
(menit) atau * 60
(jam).