Date Diff di Oracle

Ilustrasi diambil dari www.windowsphone.com. Hak cipta sepenuhnya milik pemilik gambar.

Baru saja dibuat penasaran oleh seorang rekan kantor yang tidak bisa mencari selisih waktu melalui query di Oracle. Hmmm apa mungkin oracle tidak punya fungsi date_diff? Setelah melakukan investigasi menyeluruh ke halaman paman google, ternyata solusi yang ditawarkan teramat banyak namun tidak satupun yang dapat menjawab pertanyaan secara gamblang. Setelah membaca jawaban di sini, terbesit pemikiran untuk mengolahnya lebih lanjut.

Kira-kira begini querynya:

SELECT 
  t.*, 
  FLOOR(tanggal_b - tanggal_a) AS hari,
  FLOOR(MOD(((tanggal_b - tanggal_a) * 24),24)) AS jam,
  FLOOR(MOD(((tanggal_b - tanggal_a) * 24 * 60),60)) AS menit,
  FLOOR(MOD(((tanggal_b - tanggal_a) * 24 * 60 * 60),60)) AS detik,
  TO_CHAR(TO_DATE('00:00:00','HH24:MI:SS') + (tanggal_b - tanggal_a), 'HH24:MI:SS') AS timediff
FROM (
  SELECT 
    to_date('04/12/2013 15:00:00','DD/MM/YYYY HH24:MI:SS') AS tanggal_a,
    SYSDATE AS tanggal_b
  FROM DUAL
) t;

Semoga membantu 🙂

Nanda Widyatama

Seorang web developer. Gemar diajak kuliner. Suka fotografi. Sering ngedit sana ngedit sini. Suami yang siaga.