오라클에서 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 컬럼을 다양한 날짜 형식으로 가공할 수 있습니다.
