[Oracle] Trunc 날짜 함수 포맷 알아보아요.

오라클에서 Trunc 함수를 날짜에 대하여 사용할 때, 원하는 결과에 따라 포맷을 사용할 수 있습니다. 이에 대해 간단히 알아보도록 하겠습니다. EMP 테이블의 각 입사일에 대해 특정 날짜 형식으로 변환된 결과를 보여주는 예제를 살펴보도록 해요. 필요에 따라 TRUNC 함수의 매개변수를 사용하여 연도, 분기, 월, 주, 일 단위 등으로 날짜를 자를 수 있어요~

전년도 12월 31일

해당 날짜가 속한 연도의 전년도 12월 31일을 구하려면 TRUNC(HIREDATE, 'IY')를 사용합니다.

SELECT
       HIREDATE,
       TRUNC(HIREDATE, 'IY') AS LAST_DAY_PREV_YEAR
  FROM EMP;

HIREDATE LAST_DAY_PREV_YEAR
-------- --------
91/01/05 90/12/31
99/09/06 99/01/04
01/02/04 01/01/01
03/06/17 02/12/30
81/03/12 80/12/29
07/12/01 07/01/01
81/02/20 80/12/29
81/02/22 80/12/29
81/09/28 80/12/29
81/08/09 80/12/29
87/05/23 86/12/30
81/03/12 80/12/29
03/01/23 02/12/30
96/11/17 96/01/01

14 rows selected.

해당 연도의 1월 1일

입사일이 포함된 연도의 첫날을 구할 때는 TRUNC(HIREDATE, 'YY')를 사용해요.

SELECT
       HIREDATE,
       TRUNC(HIREDATE, 'YY') AS FIRST_DAY_CURRENT_YEAR
  FROM EMP;

HIREDATE FIRST_DAY_CURRENT_YEAR
-------- --------
91/01/05 91/01/01
99/09/06 99/01/01
01/02/04 01/01/01
03/06/17 03/01/01
81/03/12 81/01/01
07/12/01 07/01/01
81/02/20 81/01/01
81/02/22 81/01/01
81/09/28 81/01/01
81/08/09 81/01/01
87/05/23 87/01/01
81/03/12 81/01/01
03/01/23 03/01/01
96/11/17 96/01/01

14 rows selected.

분기의 첫 번째 달 1일

입사일이 속한 분기의 첫 번째 날을 구할 때는 TRUNC(HIREDATE, 'Q')를 사용할 수 있습니다.

SELECT
       HIREDATE,
       TRUNC(HIREDATE, 'Q') AS FIRST_DAY_OF_QUARTER
  FROM EMP;

HIREDATE FIRST_DAY_OF_QUARTER
-------- --------
91/01/05 91/01/01
99/09/06 99/07/01
01/02/04 01/01/01
03/06/17 03/04/01
81/03/12 81/01/01
07/12/01 07/10/01
81/02/20 81/01/01
81/02/22 81/01/01
81/09/28 81/07/01
81/08/09 81/07/01
87/05/23 87/04/01
81/03/12 81/01/01
03/01/23 03/01/01
96/11/17 96/10/01

14 rows selected.

해당 연월의 첫날

입사일이 속한 월의 첫 번째 날짜를 구할 때는 'MM' 옵션을 사용합니다.

SELECT
       HIREDATE,
       TRUNC(HIREDATE, 'MM') AS FIRST_DAY_OF_MONTH
  FROM EMP;

HIREDATE FIRST_DAY_OF_MONTH
-------- --------
91/01/05 91/01/01
99/09/06 99/09/01
01/02/04 01/02/01
03/06/17 03/06/01
81/03/12 81/03/01
07/12/01 07/12/01
81/02/20 81/02/01
81/02/22 81/02/01
81/09/28 81/09/01
81/08/09 81/08/01
87/05/23 87/05/01
81/03/12 81/03/01
03/01/23 03/01/01
96/11/17 96/11/01

14 rows selected.

일 단위로 자르기

특정 날짜의 날짜 부분만 가져오고 싶다면 'DD' 옵션을 사용합니다.

SELECT
       HIREDATE,
       TRUNC(HIREDATE, 'DD') AS DATE_ONLY
  FROM EMP;

HIREDATE DATE_ONLY
-------- --------
91/01/05 91/01/05
99/09/06 99/09/06
01/02/04 01/02/04
03/06/17 03/06/17
81/03/12 81/03/12
07/12/01 07/12/01
81/02/20 81/02/20
81/02/22 81/02/22
81/09/28 81/09/28
81/08/09 81/08/09
87/05/23 87/05/23
81/03/12 81/03/12
03/01/23 03/01/23
96/11/17 96/11/17

14 rows selected.

속한 주의 첫 번째 요일과 같은 일자 구하기

매월1일 요일을 기준한 주초일자. 해당 주의 첫 번째 요일과 동일한 요일을 가지는 일자는 'W' 옵션으로 구할 수 있어요.

SELECT
       HIREDATE,
       TRUNC(HIREDATE, 'W') AS SAME_DAY_AS_FIRST_WEEKDAY
  FROM EMP;

HIREDATE SAME_DAY
-------- --------
91/01/05 91/01/01
99/09/06 99/09/01
01/02/04 01/02/01
03/06/17 03/06/15
81/03/12 81/03/08
07/12/01 07/12/01
81/02/20 81/02/15
81/02/22 81/02/22
81/09/28 81/09/22
81/08/09 81/08/08
87/05/23 87/05/22
81/03/12 81/03/08
03/01/23 03/01/22
96/11/17 96/11/15

14 rows selected.

연초의 요일과 같은 요일로 속한 주의 일자 구하기

매년 1월1일 요일을 기준한 주초일자. 해당 주에서 연초의 요일과 동일한 일자를 구할 수 있는 'WW' 옵션입니다.

SELECT
       HIREDATE,
       TRUNC(HIREDATE, 'WW') AS SAME_DAY_AS_FIRST_WEEK
  FROM EMP;

HIREDATE SAME_DAY_AS_FIRST_WEEK
-------- --------
91/01/05 91/01/01
99/09/06 99/09/03
01/02/04 01/01/29
03/06/17 03/06/11
81/03/12 81/03/12
07/12/01 07/11/26
81/02/20 81/02/19
81/02/22 81/02/19
81/09/28 81/09/24
81/08/09 81/08/06
87/05/23 87/05/21
81/03/12 81/03/12
03/01/23 03/01/22
96/11/17 96/11/11

14 rows selected.

입사일이 속한 주의 월요일 일자 구하기

주초 월요일일자. 해당 주의 월요일 날짜를 구하려면 'IW' 옵션을 사용해요.

SELECT
       HIREDATE,
       TRUNC(HIREDATE, 'IW') AS MONDAY_OF_WEEK
  FROM EMP;

HIREDATE MONDAY_OF_WEEK
-------- --------
91/01/05 90/12/31
99/09/06 99/09/06
01/02/04 01/01/29
03/06/17 03/06/16
81/03/12 81/03/09
07/12/01 07/11/26
81/02/20 81/02/16
81/02/22 81/02/16
81/09/28 81/09/28
81/08/09 81/08/03
87/05/23 87/05/19
81/03/12 81/03/09
03/01/23 03/01/20
96/11/17 96/11/11

14 rows selected.

시간 단위로 자르기

날짜와 시간을 함께 보여주되, 시간만을 자르는 방식입니다.

SELECT
       HIREDATE,
       TRUNC(HIREDATE, 'HH') AS HOUR_ONLY,
       TRUNC(HIREDATE, 'HH12') AS HOUR_12_FORMAT,
       TRUNC(HIREDATE, 'HH24') AS HOUR_24_FORMAT
  FROM EMP;

HIREDATE HOUR_ONLY HOUR_12_FORMAT HOUR_24_FORMAT
-------- -------- -------- --------
91/01/05 91/01/05 91/01/05 91/01/05
99/09/06 99/09/06 99/09/06 99/09/06
01/02/04 01/02/04 01/02/04 01/02/04
03/06/17 03/06/17 03/06/17 03/06/17
81/03/12 81/03/12 81/03/12 81/03/12
07/12/01 07/12/01 07/12/01 07/12/01
81/02/20 81/02/20 81/02/20 81/02/20
81/02/22 81/02/22 81/02/22 81/02/22
81/09/28 81/09/28 81/09/28 81/09/28
81/08/09 81/08/09 81/08/09 81/08/09
87/05/23 87/05/23 87/05/23 87/05/23
81/03/12 81/03/12 81/03/12 81/03/12
03/01/23 03/01/23 03/01/23 03/01/23
96/11/17 96/11/17 96/11/17 96/11/17

14 rows selected.

분 단위로 자르기

분 단위까지만 남기고 초 단위를 제외하는 방식입니다.

SELECT
       HIREDATE,
       TRUNC(HIREDATE, 'MI') AS MINUTE_ONLY
  FROM EMP;

HIREDATE MINUTE_O
-------- --------
91/01/05 91/01/05
99/09/06 99/09/06
01/02/04 01/02/04
03/06/17 03/06/17
81/03/12 81/03/12
07/12/01 07/12/01
81/02/20 81/02/20
81/02/22 81/02/22
81/09/28 81/09/28
81/08/09 81/08/09
87/05/23 87/05/23
81/03/12 81/03/12
03/01/23 03/01/23
96/11/17 96/11/17

14 rows selected.

분기별 날짜와 분기 표시

입사일을 기준으로 해당 분기의 첫 번째 날짜와 분기명을 구하는 예제입니다.

SELECT
       HIREDATE,
       TRUNC(HIREDATE, 'Q') AS QUARTER_DATE,
       DECODE(TO_CHAR(TRUNC(HIREDATE, 'Q'), 'MM'), '01', '1분기', '04', '2분기', '07', '3분기', '10', '4분기') AS QUARTER
  FROM EMP;

HIREDATE QUARTER_DATE QUARTER
-------- -------- --------------
91/01/05 91/01/01 1분기
99/09/06 99/07/01 3분기
01/02/04 01/01/01 1분기
03/06/17 03/04/01 2분기
81/03/12 81/01/01 1분기
07/12/01 07/10/01 4분기
81/02/20 81/01/01 1분기
81/02/22 81/01/01 1분기
81/09/28 81/07/01 3분기
81/08/09 81/07/01 3분기
87/05/23 87/04/01 2분기
81/03/12 81/01/01 1분기
03/01/23 03/01/01 1분기
96/11/17 96/10/01 4분기

14 rows selected.

이처럼 다양한 TRUNC 함수 옵션을 통해 HIREDATE 컬럼을 다양한 날짜 형식으로 가공할 수 있습니다.

이전최근
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗