Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- setrealrowsize
- BEAN
- gif초기화
- DB #데이터베이스
- loadingimage
- Spring
- singleton container
- aws
- 톰캣실행
- flex-basis
- CSS
- WITH절
- 빈
- annotaion
- cron표현식
- 스프링 빈
- HTML
- 로딩이미지변경
- 싱글톤컨테이너
- react
- 넥사크로loadingimage
- 싱글톤
- 마진상쇄
- singleton
- flex-grow
- 코딩
- Grid
- decoratetext
- 넥사크로
- frontend
Archives
- Today
- Total
All Day Tired
오라클 날짜 DATE 소요시간 본문
시작일자와 종료일자가 있을 때 이 둘을 빼서 소요시간을 구해야하는 쿼리를 만들어야 했다.
그런데 내가 필요한건 'N일 N시 N분 N초' 이런식으로 조회 되었으면 하고
0일 2시 2분 5초 이렇게 된다면 그냥 2시 2분 5초로 조회되길 원했다.
조건
- 'N일 N시 N분 N초' 로 한 컬럼으로 조회
- 일시분초에서 일이 0이면 시분초만, 일과 시가 0이면 분초만 ... 이런식으로 조회
이걸 만족하기 위해서 일단 with절을 사용했다.
쿼리문
WITH TIME_DIFF AS (
SELECT
TRUNC((종료일자컬럼 - 시작일자컬럼), 0) AS DAYS
, (TRUNC((종료일자컬럼 - 시작일자컬럼)*24), 0) - TRUNC((종료일자컬럼 - 시작일자컬럼), 0)*24) AS HOURS
, (TRUNC((종료일자컬럼 - 시작일자컬럼)*24*60, 0) - TRUNC((종료일자컬럼 - 시작일자컬럼)*24), 0)*60) AS MINUTES
, (TRUNC((종료일자컬럼 - 시작일자컬럼)*24*60*60, 0) - TRUNC((종료일자컬럼 - 시작일자컬럼)*24*60, 0)*60) AS SECONDS
FROM
)
SELECT
CASE WHEN DAYS > 0
THEN DAYS || '일 ' || HOURS || '시간 ' || MINUTES || '분 ' || SECONDS || '초'
WHEN HOURS > 0
THEN HOURS || '시간 ' || MINUTES || '분 ' || SECONDS || '초'
WHEN MINUTES > 0
THEN MINUTES || '분 ' || SECONDS || '초'
ELSE SECONDS || '초'
END AS SPEND_TIME
FROM TIME_DIFF;
나는 join을 해야했기에 with절에 종료일자, 시작일자가 있는 테이블의 컬럼을 다 넣고 trunc들을 써줬다.
일단 이 쿼리로 급한불은 껐는데 분면 2년전에 이런 비슷한 쿼리를 봤었는데 까먹음...ㅠ
코스트가 적은 쿼리를 알고계신다면 꼭 댓글로 알려주세요...
'Back > DB' 카테고리의 다른 글
PersistenceException Cause : java.lang.NumberFormatException: for input String: (0) | 2024.09.10 |
---|---|
with절 트리구조 검색 조회 시 상위노드도 조회 (0) | 2024.09.04 |
CTE (1) | 2024.09.03 |
인덱스 컬럼 변경 주의(where 조건) (0) | 2024.02.15 |
Comments