☞ ADD_MONTHS |
|
1. 정의 : 지정한 날짜로부터 특정 개월을 더한 날짜를 구함 2. 사용예) SELECT ADD_MONTHS(SYSDATE, 25) FROM DUAL; 결과) 2010/04/17 17:04:36 3. 참고 : -(minus)값일 경우 월을 차감한다.
|
|
|
|
|
|
|
☞ SYSDATE |
|
1. 정의 : 현재 시스템의 날짜 및 시간을 구함 2. 사용예) SELECT SYSDATE FROM DUAL; 결과) 2008/03/17 16:52:16 |
☞ LAST_DAY |
|
1. 정의 : 지정한 날짜의 해당 월의 말일을 구함 2. 사용예) SELECT LAST_DAY(SYSDATE) FROM DUAL; 결과) 2008/03/31 16:52:16 |
☞ NEXT_DAY |
|
1. 정의 : 지정한 날짜로부터 가장 가깝게 다가올 해당 요일의 날짜를 구함 2. 기능 : 요일구분 : 1 - 일요일 2 - 월요일 .... 7 - 토요일 3. 사용예) SELECT NEXT_DAY(TO_DATE('20080317'), 1) FROM DUAL; 결과) 2008/03/22 00:00:00 |
☞ MONTHS_BETWEEN |
|
1. 정의 : 두 날짜 상이의 개월 수를 구함 2. 사용예) SELECT MONTHS_BETWEEN(TO_DATE('20100505'), SYSDATE) FROM DUAL; 결과) 25.5900.... |
☞ 날짜에 대한 요일 구하기 |
|
1. 정의 : 날짜에 대한 요일 구하기 2. 사용예) SELECT TO_CHAR(SYSDATE, 'DY') FROM DUAL; 결과) 환경에 따라서 : 월,화,수,~~ 일 (한글) MON,THE,WED~~, SUN (영문) * 항상 한글로 원할 경우 (Oracle속성을 바꿀 수도 있지만 아래와 같이 한 sql에서만 적용시킬수도 있다) SELECT TO_CHAR(SYSDATE, 'DY', 'NLS_DATE_LANGUAGE=KOREAN') FROM DUAL;
사용예2) SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL; 결과) 1,2 ~~ 7; --숫자로 나옴 (1:일, 2:월, ~~ 7:토요일)
|
☞ 월별 주차 구하기 |
|
1. 정의 : 해당 월별로 주차(1~6주)를 구한다. 2. 1주를 -> 일 ~ 토 까지 기준일 경우 SQL SELECT '20101205' , CEIL((substrb('20101205', -2, 2) + 7 - TO_CHAR(TO_DATE('20101205', 'yyyymmdd'), 'D')) / 7) as "주차" FROM DUAL;
3. 1주를 -> 월 ~ 일 까지 기준일 경우 SQL - 종류1 (만약, 매월1일이 일요일이면 02일을 1주로 본다.) SELECT DECODE(WC, 0, 1, WC) FROM ( SELECT '20081231' DT , CEIL((substrb('20081231', -2, 2) + 7 - DECODE(TO_CHAR(TO_DATE('20081231', 'yyyymmdd'), 'D'), 1, 1, 0) - DECODE(TO_CHAR(TO_DATE('20081231','yyyymmdd'),'D'), 1, 7, (TO_CHAR(TO_DATE('20081231','yyyymmdd'),'D'))) ) / 7) as WC FROM DUAL ) ;
3. 1주를 -> 월 ~ 일 까지 기준일 경우 SQL - 종류2 (만약, 매월1일이 일요일이면 02일을 1주로 본다.) - 위 종류1 SQL문장을 좀더 보기 좋게 종류2 SQL 문으로 단순 변화만 시켰음. SELECT CEIL((DD + 7 - SUN- DECODE( YO, 1, 7, YO)) / 7) as WC FROM ( SELECT SUBSTR('20090302', -2, 2) AS DD , DECODE(SUBSTR('20090302', -2, 2), '01', 0, DECODE(TO_CHAR(TO_DATE('20090302', 'yyyymmdd'), 'D'), 1, 1, 0)) AS SUN , TO_CHAR(TO_DATE('20090302', 'yyyymmdd'), 'D') AS YO FROM DUAL ) ;
3. 1주를 -> 월 ~ 일 까지 기준일 경우 SQL - 종류3 (만약, 매월1일이 일요일이면 02일을 2주로 본다.) SELECT CEIL((DD + 7 + SUN- DECODE( YO, 1, 7, YO)) / 7) as WC FROM ( SELECT SUBSTR('20090301', -2, 2) AS DD , DECODE(SUBSTR('20090301', -2, 2), '01', 0, DECODE(TO_CHAR(TO_DATE('20090301', 'yyyymmdd'), 'D'), 1, -1, 1)) AS SUN , TO_CHAR(TO_DATE('20090301', 'yyyymmdd'), 'D') AS YO FROM DUAL ) ;
|
A. 정의 : 월별 몇주차까지 존재 하는지 조회 예문1 : 201012 월에 대해서 몇주차까지 있는지 조회
SELECT CEIL((DD + 7 + SUN- DECODE( YO, 1, 7, YO)) / 7) as WC FROM ( SELECT SUBSTR(WORKDT, -2, 2) AS DD , DECODE(SUBSTR(WORKDT, -2, 2), '01', 0, DECODE(TO_CHAR(TO_DATE(WORKDT, 'yyyymmdd'), 'D'), 1, -1, 1)) AS SUN , TO_CHAR(TO_DATE(WORKDT, 'yyyymmdd'), 'D') AS YO FROM (SELECT TO_CHAR(ADD_MONTHS('201012' || '01', 1) - 1, 'YYYYMMDD') WORKDT FROM DUAL) ) ; 결과 : 5
예문2 : 2010년도 1~12월까지 각월별 주차 구하기
SELECT CEIL((DD + 7 + SUN- DECODE( YO, 1, 7, YO)) / 7) as WC FROM ( SELECT SUBSTR(WORKDT, -2, 2) AS DD , DECODE(SUBSTR(WORKDT, -2, 2), '01', 0, DECODE(TO_CHAR(TO_DATE(WORKDT, 'yyyymmdd'), 'D'), 1, -1, 1)) AS SUN , TO_CHAR(TO_DATE(WORKDT, 'yyyymmdd'), 'D') AS YO FROM (SELECT TO_CHAR(ADD_MONTHS('201012' || '01', 1) - 1, 'YYYYMMDD') WORKDT FROM DUAL, (SELECT to_char(rownum, '00') rn FROM dual connect by level <= 12) ) ) ; |
☞ 년간 주차 구하기 |
|
1. 정의 : 년간 주차 (1~52주)를 보여준다.
2. 한 날짜에 대한 년간 주차 구하기 SELECT '20090115' as "날짜" , CEIL( (TO_CHAR(TO_DATE('20090115','yyyymmdd'),'ddd') + TO_CHAR(TO_DATE(SUBSTR('20090115',1,4)||'0101','yyyymmdd'),'d') - 1) / 7) DDATE FROM dual
3. 2010-12-10 부터 2011-01-15 까지 두 날짜 사이의 년간주차를 구하기
SELECT TO_CHAR(TRUNC(TO_DATE('2010-12-10','YYYY-MM-DD') + ((LEVEL-1)*7), 'IW') + 5, 'YYYY') YYYY , TO_CHAR(TRUNC(TO_DATE('2010-12-10','YYYY-MM-DD') + ((LEVEL-1)*7), 'IW'), 'IW') WW , TRUNC(TO_DATE('2010-12-10','YYYY-MM-DD') + ((LEVEL-1)*7), 'IW') - 1 BEGIN_DAY , TRUNC(TO_DATE('2010-12-10','YYYY-MM-DD') + ((LEVEL-1)*7), 'IW') + 5 END_DAY FROM DUAL CONNECT BY LEVEL <= ( (TRUNC(TO_DATE('2011-01-15','YYYY-MM-DD'), 'IW')+5) -- 검색종료일 - (TRUNC(TO_DATE('2010-12-10','YYYY-MM-DD'), 'IW')-1) -- 검색시작일 + 1 ) / 7 + 1 ;
|
☞ 시간 더하기 |
|
WITH T(DT) AS ( SELECT SYSDATE - (1/24) * 2 FROM DUAL --현재시각에서 2시간 전 UNION ALL SELECT SYSDATE - (1/24) * 1 FROM DUAL --현재시각에서 1시간 전 UNION ALL SELECT SYSDATE + (1/24) * 0.5 FROM DUAL --현재시각에서 30분 후 UNION ALL SELECT SYSDATE + (1/24) * 1 FROM DUAL --현재시각에서 1시간 UNION ALL SELECT SYSDATE + (1/24) * 2 FROM DUAL --현재시각에서 2시간 후 UNION ALL SELECT SYSDATE + (1/24) * 2.25 FROM DUAL --현재시각에서 2시간 20분 후 ) SELECT DT FROM T ;
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD HH24MISS' ) C_TIME, -- 현재시간 TO_CHAR(SYSDATE + 1/24,'YYYYMMDD HH24MISS' ) TIME, -- 1시간 후 TO_CHAR(SYSDATE + 40/(24*60),'YYYYMMDD HH24MISS' ) MIN, -- 40분 후 TO_CHAR(SYSDATE + 10/(24*60*60),'YYYYMMDD HH24MISS') SEC -- 10초 후 FROM DUAL;
|
☞ |
|
|
☞ ROUND |
|
1. 정의 : 날짜에 대한 반올림처리
|
☞ TRUNC |
|
1. 정의 : 날짜에 대한 버림처리 |
☞ |
|
| |