Oracle
 sql >> база данни >  >> RDS >> Oracle

намерете изминалото време между две дати в oracle sql

Когато извадите две DATE стойности като enddate - startdate получавате разликата в дни с десетична точност, така че например 1,5 би означавало 1 1/2 дни или 36 часа. Можете да го конвертирате в HH:MI:SS използвайки много математика, но по-лесният начин е да преобразувате десетичната стойност в INTERVAL DAY TO SECOND стойност с помощта на NUMTODSINTERVAL функция:

  NUMTODSINTERVAL(enddate - startdate, 'DAY')

Бихте си помислили, че TO_CHAR функция ще може да форматира това като HH:MI:SS , но изглежда не работи по този начин. Можете да използвате EXTRACT вместо това и TO_CHAR за да сте сигурни, че получавате водещи нули:

 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 част от кода на формата определя две цифри, с водеща нула, ако е необходимо. FM част се отървава от водещото място във форматирания резултат, което е запазено за отрицателен знак, ако е необходимо.

Също така имайте предвид, че вашата заявка получава обобщени стойности и ги използва в същия SELECT списък. Oracle няма да ви позволи да направите това. Вместо това опитайте нещо подобно:

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. Пример за функция на Oracle за получаване на брой дни между две дати

  2. Разделяне на стойности, разделени със запетая в Oracle

  3. Oracle rollup функция с множество колони

  4. Проблеми на WSO2 с Oracle RDS Amazon интеграция

  5. конвертирате blob в clob