Saya khawatir Anda akan kurang beruntung dengan solusi yang bekerja di Oracle dan MSSQL. Aritmatika tanggal adalah sesuatu yang sangat berbeda pada berbagai rasa DBMS.
Bagaimanapun, di Oracle kita dapat menggunakan tanggal dalam aritmatika langsung. Dan kami memiliki fungsi NUMTODSINTERVAL yang mengubah angka menjadi INTERVAL DAY TO SECOND. Jadi mari kita satukan.
Data pengujian sederhana, dua baris dengan pasangan tanggal yang berjarak sekitar dua belas jam:
SQL> alter session set nls_date_format = 'dd-mon-yyyy hh24:mi:ss'
2 /
Session altered.
SQL> select * from t42
2 /
D1 D2
-------------------- --------------------
27-jul-2010 12:10:26 27-jul-2010 00:00:00
28-jul-2010 12:10:39 28-jul-2010 00:00:00
SQL>
Kueri SQL sederhana untuk menemukan jumlah waktu yang telah berlalu:
SQL> select numtodsinterval(sum(d1-d2), 'DAY')
2 from t42
3 /
NUMTODSINTERVAL(SUM(D1-D2),'DAY')
-----------------------------------------------------
+000000001 00:21:04.999999999
SQL>
Lebih dari sehari, itulah yang kami harapkan.
Bekerja dengan kolom TIMESTAMP sedikit lebih melelahkan, tapi kita masih bisa mengerjakan trik yang sama.
Dalam contoh berikut. T42T sama dengan T42 hanya kolom yang memiliki TIMESTAMP daripada DATE untuk tipe datanya. Kueri mengekstrak berbagai komponen DS INTERVAL dan mengubahnya menjadi detik, yang kemudian dijumlahkan dan diubah kembali menjadi INTERVAL:
SQL> select numtodsinterval(
2 sum(
3 extract (day from (t1-t2)) * 86400
4 + extract (hour from (t1-t2)) * 3600
5 + extract (minute from (t1-t2)) * 600
6 + extract (second from (t1-t2))
7 ), 'SECOND')
8 from t42t
9 /
NUMTODSINTERVAL(SUM(EXTRACT(DAYFROM(T1-T2))*86400+EXTRACT(HOURFROM(T1-T2))*
---------------------------------------------------------------------------
+000000001 03:21:05.000000000
SQL>
Setidaknya hasil ini dalam hitungan detik!