Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

SQL:Apakah mungkin untuk SUM() bidang tipe INTERVAL?

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!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memasukkan data ke database oracle menggunakan php

  2. Menggunakan RTRIM atau REGEXP_REPLACE untuk mengganti koma dengan spasi koma dan tanda kutip tunggal

  3. Kursor untuk loop di Oracle

  4. Cara menentukan minggu seperempat dalam kueri Oracle

  5. SQL:Apakah mungkin untuk 'mengelompokkan menurut' menurut hasil fungsi 'suka'?