SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

Cara Menghitung Perbedaan Antara Dua Timestamp di SQLite

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. impor database sqlite yang sudah dibuat (xamarin)

  2. Basis data pengaksesan Robolectric menimbulkan kesalahan

  3. Kueri hanya data pertama dari sebuah tabel

  4. Bisakah entri basis data yang ditambahkan dari item dihapus dengan tombol?

  5. 2 Cara Menghapus Baris Duplikat di SQLite