- TO_DATE 함수는 CHAR, VARCHAR2형을 DATE 타입으로 변환한다. - TO_DATE(char, format) 형식으로 사용 할 수 있다. - Date Format Elements 에서 'W', 'WW' Format을 제외한 나머지는 TO_DATE 함수의 format으로 사용 할 수 있다.
3) TO_CHAR
- TO_CHAR 함수는 DATE형, NUMBER형을 문자 타입으로 변환하는 함수이다.
ex) 1. 주차 계산
-- 해당일의 주차
SELECT TO_CHAR(SYSDATE,'IW') FROM DUAL;
-- 해당 주의 첫번째 일자 [주초 일자]
SELECT
SYSDATE AS 오늘
, SYSDATE - 7 AS "7일전"
, TRUNC(SYSDATE, 'W') AS 해당월1일_요일_기준 --해당월1일 요일을 기준한 주초일자
, TRUNC(SYSDATE, 'IW') AS 월요일_기준
, TRUNC(SYSDATE, 'DY') AS 일요일_기준
FROM DUAL;
/*
오늘 7일전 해당월1일_요일_기준 월요일_기준 일요일_기준
2020/04/14 오후 4:59:59 2020/04/07 오후 4:59:59 2020/04/08 2020/04/13 2020/04/12
*/
ex) 2. 요일
SELECT SYSDATE FROM DUAL; -- 2020/04/14 오후 4:59:33SELECT TO_CHAR(SYSDATE,'D') FROM DUAL; -- 3SELECT TO_CHAR(SYSDATE, 'DY') FROM DUAL; -- 화
SELECT TO_CHAR(SYSDATE,'DAY') FROM DUAL; -- 화요일
SELECT TO_CHAR(SYSDATE, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') FROM DUAL; -- TUE
SELECT TO_CHAR(SYSDATE, 'DAY', 'NLS_DATE_LANGUAGE=ENGLISH') FROM DUAL; -- TUESDAY
ex) 3. 요일로 날짜 계산
-- NEXT_DAY(날짜, '요일' OR 숫자)
SELECT NEXT_DAY((TRUNC(SYSDATE,'MM')-1),'월') FROM DUAL; --2020/04/06SELECT NEXT_DAY((TRUNC(SYSDATE,'MM')-1),'화요일') FROM DUAL; -- 2020/04/07SELECT NEXT_DAY((TRUNC(SYSDATE,'MM')-1),3) FROM DUAL; -- 2020/04/07
-- 당월 마지막 주 특정 요일
SELECT NEXT_DAY((LAST_DAY(SYSDATE)-7),'월') FROM DUAL; -- 2020/04/27 오후 5:07:03SELECT NEXT_DAY((LAST_DAY(SYSDATE)-7),'화요일') FROM DUAL; -- 2020/04/28 오후 5:07:12SELECT NEXT_DAY((LAST_DAY(SYSDATE)-7),3) FROM DUAL; -- 2020/04/28 오후 5:07:16
-- 월요일기준
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD DAY') 오늘날짜
, TO_CHAR(TRUNC(SYSDATE,'IW') ,'YYYY-MM-DD DAY') 월
, TO_CHAR(TRUNC(SYSDATE,'IW')+1,'YYYY-MM-DD DAY') 화
, TO_CHAR(TRUNC(SYSDATE,'IW')+2,'YYYY-MM-DD DAY') 수
, TO_CHAR(TRUNC(SYSDATE,'IW')+3,'YYYY-MM-DD DAY') 목
, TO_CHAR(TRUNC(SYSDATE,'IW')+4,'YYYY-MM-DD DAY') 금
, TO_CHAR(TRUNC(SYSDATE,'IW')+5,'YYYY-MM-DD DAY') 토
, TO_CHAR(TRUNC(SYSDATE,'IW')+6,'YYYY-MM-DD DAY') 일
FROM DUAL;
-- 일요일기준
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD DAY') 오늘날짜
, TO_CHAR(TRUNC(SYSDATE,'D') ,'YYYY-MM-DD DAY') 일
, TO_CHAR(TRUNC(SYSDATE,'D')+1,'YYYY-MM-DD DAY') 월
, TO_CHAR(TRUNC(SYSDATE,'D')+2,'YYYY-MM-DD DAY') 화
, TO_CHAR(TRUNC(SYSDATE,'D')+3,'YYYY-MM-DD DAY') 수
, TO_CHAR(TRUNC(SYSDATE,'D')+4,'YYYY-MM-DD DAY') 목
, TO_CHAR(TRUNC(SYSDATE,'D')+5,'YYYY-MM-DD DAY') 금
, TO_CHAR(TRUNC(SYSDATE,'D')+6,'YYYY-MM-DD DAY') 토
FROM DUAL;
ex) 4. etc
-- 당월 마지막 날짜
SELECT LAST_DAY(SYSDATE) FROM DUAL;
-- 당월 첫째 날
SELECT TRUNC(SYSDATE,'MM') FROM DUAL;
-- 다음달 첫째 날
SELECT ADD_MONTHS( TRUNC(SYSDATE,'MM'), 1) FROM DUAL;
-- 해당일 포함 된 주의 목요일 날짜
SELECT CASE WHEN TO_CHAR(TO_DATE('20100629','YYYYMMDD'), 'D') < 5 THEN TRUNC(TO_DATE('20100629','YYYYMMDD')-5, 'IW')+3
ELSE TRUNC(TO_DATE('20100629','YYYYMMDD'), 'IW')+3 END RESULT
FROM DUAL;
-- 당월 마지막 날의 요일 구하기
SELECT TO_CHAR(LAST_DAY(SYSDATE),'D') FROM DUAL;
-- 마지막주 월요일
SELECT NEXT_DAY((LAST_DAY(SYSDATE)-7),2)-1 FROM DUAL;
-- 마지막주 목요일
SELECT NEXT_DAY((LAST_DAY(SYSDATE)-7),5) FROM DUAL;