오라클 요일함수-주간 요일 찾기
TRUNC 주(Week)에 대한 Format
'w' : 매월1일 요일을 기준한 주초일자.
'ww' : 매년 1월1일 요일을 기준한 주초일자.
'iw' : 주초 월요일일자.
'd' / 'dy' / 'day' : 주초 일요일 일자.
TRUNC week 예제
-- 해당 주의 첫번째 일자 [주초 일자]
SELECT
SYSDATE - 7 AS "7일전"
, TRUNC(SYSDATE, 'w') AS 매월1일_요일_기준 --매월1일 요일을 기준한 주초일자
, TRUNC(SYSDATE, 'ww') AS 매년1월1일_요일_기준 --매년 1월1일 요일을 기준한 주초일자.
, TRUNC(SYSDATE, 'iw') AS 월요일_기준
, TRUNC(SYSDATE, 'dy') AS 일요일_기준
, TRUNC(SYSDATE, 'iw') - 2 AS 항상_전주토요일1
, TRUNC(SYSDATE, 'dy') - 1 AS 항상_전주토요일2
FROM dual
;
day : Day of week (월-일 or Mon-Sun).
select sysdate from dual
;
select to_char(sysdate,'D') from dual
;
select to_char(sysdate,'DAY') from dual
;
select to_char(sysdate,'yyyymmdd day') from dual
;
d : Day of week (1-7).
iw : Week of year (1-52 or 1-53) based on the ISO standard.
-- 월요일 기준 : 오늘 날짜를 기준으로 월요일 일자 찾기
[올바른 예]
select TO_CHAR(TRUNC(sysdate,'iw') ,'yyyymmdd') mon from dual; 주 처음일자
select TO_CHAR(TRUNC(sysdate,'iw') +6 ,'yyyymmdd') mon from dual; -- 주 마지막일자
[잘못된 예] 일자 연산하기 위해 넣은 숫자 위치가 TRUNC 함수 바로 뒤에서 연산되어야 한다.
샘플 ) select TO_CHAR(TRUNC(sysdate,'iw') ,'yyyymmdd') +6 mon from dual; -- 주 마지막일자
위와 같이 시스템에서 날짜계산이 모두 끝난 시점인 TO_CHAR(블라~~블라~~) 뒤에서 연산 하면
문자열에 날자를 더하는 형식이 되므로 주의 해야 함
예를 들어 TO_CHAR(TRUNC(sysdate,'iw') ,'yyyymmdd') 의
결과 값이 '20101128' 이었다고 한다면
시스템에서는 to_number('20101128') +6 = 20101134 의 결과 값을 토해 낸다.
-- 월요일기준
SELECT sysdate
, TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw') ,'yyyymmdd') mon
, TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')+1,'yyyymmdd') tue
, TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')+2,'yyyymmdd') wed
, TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')+3,'yyyymmdd') thu
, TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')+4,'yyyymmdd') fri
, TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')+5,'yyyymmdd') sat
, TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')+6,'yyyymmdd') sun
FROM dual
;
-- 월요일기준
SELECT to_char(sysdate, 'yyyymmdd day') 금일
, TO_CHAR(TRUNC(sysdate,'iw') ,'yyyymmdd day') 월
, TO_CHAR(TRUNC(sysdate,'iw')+1,'yyyymmdd day') 화
, TO_CHAR(TRUNC(sysdate,'iw')+2,'yyyymmdd day') 수
, TO_CHAR(TRUNC(sysdate,'iw')+3,'yyyymmdd day') 목
, TO_CHAR(TRUNC(sysdate,'iw')+4,'yyyymmdd day') 금
, TO_CHAR(TRUNC(sysdate,'iw')+5,'yyyymmdd day') 토
, TO_CHAR(TRUNC(sysdate,'iw')+6,'yyyymmdd day') 일
FROM dual
;
-- 일요일기준
SELECT to_char(sysdate, 'yyyymmdd day') 금일
, TO_CHAR(TRUNC(sysdate,'d') ,'yyyymmdd day') 일
, TO_CHAR(TRUNC(sysdate,'d')+1,'yyyymmdd day') 월
, TO_CHAR(TRUNC(sysdate,'d')+2,'yyyymmdd day') 화
, TO_CHAR(TRUNC(sysdate,'d')+3,'yyyymmdd day') 수
, TO_CHAR(TRUNC(sysdate,'d')+4,'yyyymmdd day') 목
, TO_CHAR(TRUNC(sysdate,'d')+5,'yyyymmdd day') 금
, TO_CHAR(TRUNC(sysdate,'d')+6,'yyyymmdd day') 토
FROM dual
;
[출처] 오라클 요일함수-주간 요일 찾기|작성자 레이블하울
'SQL > ORACLE함수' 카테고리의 다른 글
MAX() OVER (PARTITION BY ..) (0) | 2016.01.28 |
---|---|
오라클(Oracle) SUBSTR 함수로 문자열을 다양하게 자르는 방법 (0) | 2016.01.04 |
[오라클] MOD, TRUNC, EXTRACT (0) | 2015.11.20 |
날짜함수 (0) | 2015.11.20 |
Oracle 오라클 trunc() 함수로 날짜 자르는법 방법 (0) | 2015.11.20 |
Oracle 오라클 SYSDATE(시스템시간=현재시간)을 년도만 보여주기 (0) | 2015.11.20 |
ROLLUP 사용법 (0) | 2015.10.08 |
오라클에서 SQL의 WITH와 같은 역활하는 함수또는 방법은 (0) | 2014.08.08 |