사용자 도구

사이트 도구


dbms:oracle:devel:oracledatefunction

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
dbms:oracle:devel:oracledatefunction [2007/03/07 11:24]
starlits
dbms:oracle:devel:oracledatefunction [2016/06/29 03:22] (현재)
starlits [당월의 주차]
줄 8: 줄 8:
 | SYSTIMESTAMP | SYSTIMESTAMP | 07/03/07 10:55:24.260425 +09:00 | | SYSTIMESTAMP | SYSTIMESTAMP | 07/03/07 10:55:24.260425 +09:00 |
 | LAST_DAY(날짜값) | LAST_DAY('98/02/17') | 98/02/28 | | LAST_DAY(날짜값) | LAST_DAY('98/02/17') | 98/02/28 |
-| NEXT_DAY(날짜값, 요일 문자) | NEXT_DAY('98/02/17','FRIDAY') | 98/02/20 |+| [[dbms:oracle:devel:oracledatefunction:next_day |NEXT_DAY]](날짜값, 요일 문자) | NEXT_DAY('98/02/17','FRIDAY') | 98/02/20 |
 | MONTHS_BETWEEN (날짜값1,날짜값2) | MONTHS_BETWEEN('97/04/26','95/06/22') | 21.1290323 | | MONTHS_BETWEEN (날짜값1,날짜값2) | MONTHS_BETWEEN('97/04/26','95/06/22') | 21.1290323 |
 | ADD_MONTHS(날짜값, 숫자값) | ADD_MONTHS('95/06/22',21) | 97/04/22 | | ADD_MONTHS(날짜값, 숫자값) | ADD_MONTHS('95/06/22',21) | 97/04/22 |
줄 65: 줄 65:
  
  
 +===== 날짜계산 =====
 +
 +==== 날짜구하기 ====
 +
 +
 +  - 특정일(2006-12-22)과 현재 날짜까지의 달의 차이 수(NUMBER 타입으로 변환) <code>
 +SQL> select months_between(sysdate,to_date('2006-12-22','yyyy-mm-dd')) from dual;
 +</code>
 +    * months_between(A,B) = A-B/30
 +  - 특정일(SYSDATE)에 달수(4)를 더한 날 <code>
 +SQL> select add_months(sysdate,4)  from dual;
 +</code>
 +  - 특정일(SYSDATE)의 다음주 요일(friday) <code>
 +SQL> select next_day(sysdate,'friday' from dual;
 +</code>
 +  - 특정일(SYSDATE)의 해당 월의 마지막 날 <code>
 +SQL> select last_day(sysdate) from dual;
 +</code>
 +  - 특정일의 반올림(오후면 다음날..) <code>
 +SQL> select round(sysdate,'dd' from dual;
 +</code>
 +  - 특정일의 전주 토요일(해당 전주의 마지막 날)에해당하는 날짜 <code>
 +SQL> select trunc(sysdate,'ww' from dual;
 +</code>
 +  - 특정일의 주 일요일(해당 주의 첫째 날)에해당하는 날짜 <code>
 +SQL> select trunc(sysdate,'D' from dual;
 +</code>
 +
 +==== WHERE 조건상의 날짜계산 ====
 +  - **어제** 날짜칼럼 <code>
 +BETWEEN TRUNC(SYSDATE-1) AND TRUNC(SYSDATE-1)+0.99999421
 +</code>
 +  - **오늘** 날짜칼럼 <code>
 +BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + 0.99999421
 +</code>
 +  - **내일** 날짜칼럼 <code>
 +BETWEEN TRUNC(SYSDATE+1) AND TRUNC(SYSDATE+1)+0.99999421
 +</code>
 +  - **금주** 날짜칼럼 <code>
 +BETWEEN TRUNC(SYSDATE+1)-TO_CHAR(SYSDATE,'D')
 +    AND TRUNC(SYSDATE+1)-TO_CHAR(SYSDATE,'D')+6.99999421
 +</code>
 +  - **차주** 날짜칼럼 <code>
 +BETWEEN TRUNC(SYSDATE+8)-TO_CHAR(SYSDATE, 'D')
 +    AND TRUNC(TRUNC(SYSDATE)+14.99999421)-TO_CHAR(SYSDATE, 'D')
 +</code>
 +  - **금월** 날짜칼럼 <code>
 +BETWEEN TRUNC(SYSDATE+1)-TO_CHAR(SYSDATE,'DD')
 +    AND TRUNC(LAST_DAY(SYSDATE))+0.99999421
 +</code>
 +  - **전월** 날짜칼럼 <code>
 +BETWEEN TRUNC(ADD_MONTHS(SYSDATE,-1)+1)-TO_CHAR(SYSDATE,'DD')
 +    AND TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE, -1)))+0.99999421
 +</code>
 +  - **차월** 날짜칼럼 <code>
 +BETWEEN ADD_MONTHS(TRUNC(SYSDATE),1)-TO_CHAR(SYSDATE,'DD')+1
 +    AND LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),1)+0.99999421)
 +</code>
 + 
 +
 +==== 특정일 까지 간격 ====
 +
 +  * 특정일 까지의 간격을 년, 개월, 일로 표현하기 <code>
 +SELECT
 +  TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('20060101', 'YYYYMMDD'))/12) "년",
 +  TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('20060101', 'YYYYMMDD')) -
 +  TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('20060101', 'YYYYMMDD'))/12) * 12) "개월",
 +  TRUNC((MONTHS_BETWEEN(SYSDATE,TO_DATE('20060101', 'YYYYMMDD')) -
 +  TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('20060101', 'YYYYMMDD')))) * 30.5) "일"
 +FROM DUAL;
 +</code>
 +
 +==== 당월의 주차 ====
 +  * 당월의 주차 구하기 <code>
 +SELECT 
 +    TO_CHAR(SYSDATE,'YYYYMMDD') AS "날짜"
 +    ,CEIL((TO_NUMBER(SUBSTRB(TO_CHAR(SYSDATE,'YYYYMMDD'), -2, 2)) + 7 - TO_NUMBER(TO_CHAR(TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'YYYYMMDD'),'D')))/7) AS "월별 주차"
 +FROM DUAL;
 +</code>
 +    * TO_CHAR(SYSDATE,'YYYYMMDD') 대신 '20070307' 을 넣어서 계산하면 이해가 더 빠르다.
 +
 +  * 한해의 주차 구하기 <code>
 +select rownum
 +  ,to_char(to_date('2015-12-31','YYYY-MM-DD')+rownum,'YYYY-MM-DD') as ymd
 +  ,TO_NUMBER(TO_CHAR(TO_DATE(TO_CHAR(to_date('2015-12-31','YYYY-MM-DD')+rownum,'YYYYMMDD'),'YYYYMMDD'),'D')) as t1
 +  ,TO_CHAR(to_date('2015-12-31','YYYY-MM-DD')+rownum,'WW') as "한해의 주차 1"
 +  ,TO_CHAR(to_date('2015-12-31','YYYY-MM-DD')+rownum,'IW') as "한해의 주차 2"
 +  ,TO_CHAR(to_date('2015-12-31','YYYY-MM-DD')+rownum,'W') AS "월별 주차"
 +from all_tables
 +where rownum < 367;
 +</code>
 +==== 시간 계산 SQL ====
 +<code>
 +SELECT TRUNC(TO_DATE('20060502223443','YYYYMMDDHH24MISS')-TO_DATE('20060501213344','YYYYMMDDHH24MISS')) || ' day ' ||
 +       TRUNC(MOD((TO_DATE('20060502223443','YYYYMMDDHH24MISS')-TO_DATE('20060501213344','YYYYMMDDHH24MISS')),1)*24) || ' hour ' ||
 +       TRUNC(MOD((TO_DATE('20060502223443','YYYYMMDDHH24MISS')-TO_DATE('20060501213344','YYYYMMDDHH24MISS'))*24,1)*60) || ' minute ' ||
 +       TRUNC(ROUND(MOD((TO_DATE('20060502223443','YYYYMMDDHH24MISS')-TO_DATE('20060501213344','YYYYMMDDHH24MISS'))*24*60,1)*60)) || ' sec '
 +       " Time Interval "
 +FROM DUAL ;
 +</code>
dbms/oracle/devel/oracledatefunction.1173234281.txt.gz · 마지막으로 수정됨: 2007/03/07 11:24 저자 starlits