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

temukan waktu yang telah berlalu antara dua tanggal di Oracle sql

Saat Anda mengurangi dua DATE nilai seperti enddate - startdate Anda mendapatkan perbedaan dalam hari dengan akurasi desimal, jadi misalnya 1,5 berarti 1 1/2 hari atau 36 jam. Anda dapat mengonversinya menjadi HH:MI:SS menggunakan banyak matematika, tetapi cara yang lebih mudah adalah dengan mengubah nilai desimal menjadi INTERVAL DAY TO SECOND nilai menggunakan NUMTODSINTERVAL fungsi:

  NUMTODSINTERVAL(enddate - startdate, 'DAY')

Anda akan berpikir TO_CHAR fungsi akan dapat memformat ini sebagai HH:MI:SS , tetapi tampaknya tidak berfungsi seperti itu. Anda dapat menggunakan EXTRACT sebagai gantinya, dan TO_CHAR untuk memastikan Anda mendapatkan angka nol di depan:

 TO_CHAR(EXTRACT(HOUR FROM NUMTODSINTERVAL(enddate-startdate, 'DAY')), 'FM00')
   || ':' ||
 TO_CHAR(EXTRACT(MINUTE FROM NUMTODSINTERVAL(enddate-startdate, 'DAY')), 'FM00')
   || ':' ||
 TO_CHAR(EXTRACT(SECOND FROM NUMTODSINTERVAL(enddate-startdate, 'DAY')), 'FM00')

00 bagian dari kode format menentukan dua digit, dengan nol di depan jika diperlukan. FM part menghilangkan spasi terdepan dalam hasil yang diformat, yang dicadangkan untuk tanda negatif jika diperlukan.

Perhatikan juga bahwa kueri Anda mendapatkan nilai agregat dan menggunakannya dalam SELECT . yang sama daftar. Oracle tidak akan membiarkan Anda melakukan ini. Cobalah sesuatu seperti ini sebagai gantinya:

WITH StartEndByID AS (
  SELECT
    msglog.id,
    NUMTODSINTERVAL(max(msglog.timestamp) - min(msglog.timestamp), 'DAY') elapsed
  FROM messagelog msglog
  GROUP BY id
)
SELECT
  id,
  TO_CHAR(EXTRACT(HOUR FROM elapsed), 'FM00') || ':' ||
    TO_CHAR(EXTRACT(MINUTE FROM elapsed), 'FM00') || ':' ||
    TO_CHAR(EXTRACT(SECOND FROM elapsed), 'FM00') AS ElapsedHHMISS
FROM StartEndByID


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengembalikan RefCursor dari fungsi Oracle?

  2. Oracle:Cara untuk menggabungkan kolom yang tidak dikelompokkan dalam hasil yang dikelompokkan

  3. Bisakah saya menginstal JDK 1.6 melalui JDK 1.3 default dari database Oracle?

  4. Gabung luar kiri Oracle XMLTABLE tidak mengembalikan hasil saat XPath tidak ada

  5. SSIS - nilai tidak dapat dikonversi karena potensi kehilangan data