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 - startdate
10진수 정확도로 일 단위의 차이를 얻을 수 있으므로, 예를 들어 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을 지정합니다.FM
part는 형식화된 결과에서 선행 공백을 제거하며, 필요한 경우 음수 기호용으로 예약됩니다.
또한 쿼리는 집계 값을 가져와 동일한 값에서 사용합니다.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
'sourcecode' 카테고리의 다른 글
MySQL에서 예약된 단어를 테이블 또는 열 이름으로 사용하여 구문 오류 발생 (0) | 2023.07.27 |
---|---|
"wait_message: 응답을 수신하지 못했습니다. 10004003"? (0) | 2023.07.27 |
특정 숫자의 숫자로 난수를 생성하는 방법은 무엇입니까? (0) | 2023.07.22 |
Python Requests 패키지:xml 응답 처리 (0) | 2023.07.22 |
CreateDatabase를 사용하여 봄부터 utf8mb4 문자 집합으로 데이터베이스를 만드는 방법존재하지 않는 경우? (0) | 2023.07.22 |