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

Tampilan Oracle lebih dari 24 jam

Anda perlu memisahkan perbedaan waktu menjadi elemen hari, jam, menit, dan detik penyusunnya, menggabungkan jumlah hari * 24 dengan jumlah jam, dan menyatukannya kembali.

Saat mengurangkan tanggal, Anda mendapatkan selisih sebagai jumlah hari, jadi Anda perlu mengubah bagian pecahan menjadi elemen lain, yang dapat Anda lakukan dengan kombinasi trunc dan mod; menggunakan CTE untuk membuat ini sedikit lebih mudah diikuti dan menunjukkan setiap nilai sendiri serta digabungkan menjadi satu string:

with y as (
  select id, end_time - start_time as runtime
  from mytable
)
select id,
  runtime,
  trunc(runtime) as days,
  24 * trunc(runtime) as day_hours,
  trunc(24 * mod(runtime, 1)) as hours,
  trunc(60 * mod(24 * (runtime), 1)) as minutes,
  trunc(60 * mod(24 * 60 * (runtime), 1)) as seconds,
  lpad(24 * trunc(runtime)
    + trunc(24 * mod(runtime, 1)), 2, '0')
    ||':'|| lpad(trunc(60 * mod(24 * (runtime), 1)), 2, '0')
    ||':'|| lpad(trunc(60 * mod(24 * 60 * (runtime), 1)), 2, '0')
    as runtime
from y;

        ID    RUNTIME       DAYS  DAY_HOURS      HOURS    MINUTES    SECONDS RUNTIME 
---------- ---------- ---------- ---------- ---------- ---------- ---------- --------
         1 .184918981          0          0          4         26         16 04:26:16 
         2 1.14465278          1         24          3         28         18 27:28:18 

Anda juga dapat mengonversi tanggal menjadi stempel waktu untuk penghitungan, yang memberi Anda jenis interval, lalu menggunakan extract berfungsi untuk mendapatkan elemen sebagai gantinya; pokoknya sama aja:

with y as (
  select id,
    cast(end_time as timestamp) - cast (start_time as timestamp) as runtime
  from mytable
)
select id,
  runtime,
  extract (day from runtime) as days,
  24 * extract (day from runtime) as day_hours,
  extract (hour from runtime) as hours,
  extract (minute from runtime) as minutes,
  extract (second from runtime) as seconds,
  lpad(24 * extract (day from runtime) + extract (hour from runtime), 2, '0')
    ||':'|| lpad(extract (minute from runtime), 2, '0')
    ||':'|| lpad(extract (second from runtime), 2, '0')
    as runtime
from y;

        ID RUNTIME           DAYS  DAY_HOURS      HOURS    MINUTES    SECONDS RUNTIME 
---------- ----------- ---------- ---------- ---------- ---------- ---------- --------
         1 0 4:26:17.0          0          0          4         26         17 04:26:17 
         2 1 3:28:18.0          1         24          3         28         18 27:28:18 

Atau sedikit variasi, dapatkan perbedaan dari tanggal dan kemudian ubah menjadi interval:

with y as (
  select id,
    numtodsinterval(end_time - start_time, 'DAY') as runtime
  from mytable
)
...

Demo SQL Fiddle.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa dan kapan saya harus menentukan setFetchSize()?

  2. Jenis TABEL atau VARRAY anonim di Oracle

  3. Bagaimana cara menjatuhkan tabel di oracle

  4. Mengaktifkan SSL atau TLS di Oracle Apps R12

  5. Permintaan untuk memeriksa ukuran tabel di database Oracle