sourcecode

oracle sql에서 두 날짜 사이의 경과 시간 찾기

codebag 2023. 7. 27. 21:56
반응형

oracle sql에서 두 날짜 사이의 경과 시간 찾기

hh:mm:ss 형식으로 시간 간의 차이를 찾아야 합니다.

select msglog.id,max(msglog.timestamp) enddate,
   min(msglog.timestamp) startdate,
   enddate - startdate
   from MESSAGELOG msglog
   group by id

위 쿼리에서 msglog.timestamp는 DATE 유형입니다.

오라클에서 올바른 형식의 시간 사이의 경과 시간 또는 차이를 어떻게 얻을 수 있습니까?

두 개를 빼면,DATE같은 가치관enddate - startdate10진수 정확도로 일 단위의 차이를 얻을 수 있으므로, 예를 들어 1.5는 1일 반 또는 36시간을 의미합니다.변환할 수 있습니다.HH:MI:SS많은 수학을 사용하지만, 더 쉬운 방법은 십진수 값을 변환하는 것입니다.INTERVAL DAY TO SECOND값은 다음 함수를 사용합니다.

  NUMTODSINTERVAL(enddate - startdate, 'DAY')

당신은 생각할 것입니다.TO_CHAR함수는 이것을 다음과 같이 포맷할 수 있을 것입니다.HH:MI:SS하지만 그런 식으로 작동하지는 않는 것 같습니다.사용할 수 있습니다.EXTRACT대신에, 그리고TO_CHAR선행 0이 나오는지 확인합니다.

 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형식 코드의 일부는 두 자리를 지정하고, 필요할 경우 선행 0을 지정합니다.FMpart는 형식화된 결과에서 선행 공백을 제거하며, 필요한 경우 음수 기호용으로 예약됩니다.

또한 쿼리는 집계 값을 가져와 동일한 값에서 사용합니다.SELECT목록입니다. 오라클은 당신이 이런 일을 하도록 허락하지 않습니다.대신 다음과 같은 방법을 사용해 보십시오.

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

Oracle에서 날짜 산술은 일 단위로 표현됩니다.시간으로 환산하면 24를 곱한 다음trunc정수를 구하는 방법:

trunc(24 * (enddate - startdate))

분을 가져오려면 일 값을 분으로 변환하고mod()60과 함께:

mod(trunc(24 * 60 * (enddate - startdate)), 60)

초 동안, 다시 일을 초로 변환하고mod()60과 함께:

mod(trunc(24 * 60 * 60 * (enddate - startdate)), 60)

이제 이것들을 조합하여 필요한 문자열 값을 얻을 수 있습니다.

초 단위로 차이를 얻으려면 다음을 사용합니다.

select round(24 * 60 * 60* (TO_DATE('2017/02/17 9:32:25', 'YYYY/MM/DD HH:MI:SS') - TO_DATE('2017/02/17 8:30:30', 'YYYY/MM/DD HH:MI:SS'))) from dual;

언급URL : https://stackoverflow.com/questions/21097004/find-the-elapsed-time-between-two-dates-in-oracle-sql

반응형