날짜형함수

DB 2009. 6. 2. 13:53

날짜 함수는 오라클 날짜에 대해 연산을 한다.

모든 날자 함수는 숫자값을 리턴하는데 MONTHS_BETWEEN을 제외하고는 DATE형을 리턴한다.


1. MONTHS_BETWEEN 함수

   1) 날짜와 날짜 사이의 월수를 계산한다.

   2) 결과는 음수 또는 양수가 될 수 있다.

   3) 결과의 정수부분은 월을, 소수부분은 일을 나타낸다.

   사용법> MONTHS_BETWEEN(date1, date2)

   예> MONTHS_BETWEEN(sysdate, hiredate)  ==> 212.04794

   문제> EMP 테이블에서 10번 부서원의 현재까지의 근무 월수를 계산하여 출력하여라.

      SELECT ename, hiredate, SYSDATE, MONTHS_BETWEEN(SYSDATE, hiredate) m_between,
       TRUNC(MONTHS_BETWEEN(SYSDATE, hiredate), 0) t_between
       FROM emp
       WHERE deptno = 10
       ORDER BY MONTHS_BETWEEN(SYSDATE, hiredate) DESC


      ENAME                HIREDATE SYSDATE   M_BETWEEN  T_BETWEEN
      -------------------- -------- -------- ---------- ----------
      CLARK                81/06/09 08/12/29 330.667913        330
      KING                 81/11/17 08/12/29 325.409848        325
      MILLER               82/01/23 08/12/29   323.2163        323


2. ADD_MONTHS 함수

   날짜에 월을 더하고 빼는 함수이다. 결과는 날짜형.

   사용법> ADD_MONTHS(date1, n)

   예> ADD_MONTHS(hiredate , 5)  => 82/06/23

        //기존의 날짜에서 5개월을 더한 값이다.

   문제> EMP 테이블에서 10번 부서원의 입사 일자로부터 5개월이 지난 후 날짜를 계산하여 출력.

      SELECT ename, hiredate, ADD_MONTHS(hiredate, 5) a_month
      FROM emp
      WHERE deptno = 10
      ORDER BY hiredate DESC;


      ENAME                HIREDATE A_MONTH
      -------------------- -------- --------
      MILLER               82/01/23 82/06/23
      KING                 81/11/17 82/04/17
      CLARK                81/06/09 81/11/09


3. NEXT_DAY 함수

   1) 명시된 요일의 돌아오는 날짜를 계산한다.

   2) 요일 뿐 아니라 숫자도 기술 가능(SUNDAY:1, MONDAY:2......)

   3) NLS_LANG이 KOREAN_KOREA.KO16KSC5601로 되어 있으면 한글도 사용 가능.

       월요일, 화요일...(월,화,수..와 같이 넣을 수 도 있다.)

   사용법> NEXT_DAY(date1, 'string' | n)

   예> NEXT_DAY(hiredate, 'FRIDAY')  ==> 82/01/29

         // 10g에서는 'FRIDAY', 'SUNDAY'와 같은 영문 표시형식이 안되는데,

         // 다른 표기법이 있을지도 므르겠지만 아무튼 위 표시형식은 안된다.

         NEXT_DAY(hiredate, '금요일')  ==> 82/01/29

   문제> EMP테이블에서 10번 부서원의 입사 일자로부터 돌아오는 금요일을 계산하여 출력하여라.

      SELECT ename, hiredate, NEXT_DAY(hiredate, '금요일') n_day,
      NEXT_DAY(hiredate, 6) n_6, NEXT_DAY(hiredate, 7) n_7, NEXT_DAY(hiredate, '금') n_금
      FROM emp
      WHERE deptno = 10
      ORDER BY hiredate DESC


      ENAME                HIREDATE N_DAY    N_6      N_7      N_금
      -------------------- -------- -------- -------- -------- --------
      MILLER               82/01/23 82/01/29 82/01/29 82/01/30 82/01/29
      KING                 81/11/17 81/11/20 81/11/20 81/11/21 81/11/20
      CLARK                81/06/09 81/06/12 81/06/12 81/06/13 81/06/12


4. LAST_DAY

   월의 마지막 날짜를 계산. 윤년, 평년은 자동 계산

   사용법> LAST_DAY(date1)

   예> LAST_DAY(hiredate)  ==> 81-11-30

   문제> EMP 테이블에서 입사한 달의 근무 일 수를 계산하여 출력하여라.

            단, 토요일과 일요일도 근무 일수에 포함한다.

       SELECT empno, ename, hiredate, LAST_DAY(hiredate) l_last,
       LAST_DAY(hiredate) - hiredate l_day
       FROM emp
       WHERE deptno = 10
       ORDER BY hiredate DESC


       EMPNO ENAME                HIREDATE L_LAST        L_DAY
       ----- -------------------- -------- -------- ----------
       7934 MILLER               82/01/23 82/01/31          8
       7839 KING                 81/11/17 81/11/30         13
       7782 CLARK                81/06/09 81/06/30         21


5. ROUND 함수

   날짜도 반올림이 가능하다. 7개월부터 올림된다고 이해하면 되겠다.

   사용법> ROUND(date1 [,fmt])

   예> ROUND('99-06-25', 'MONTH')  ==> 99-07-01

         ROUND('98-06-25', 'YEAR')  ==> 98-01-01


6. TRUNC 함수

    숫자형 함수와 마찬가지로 명시된 형식으로 절삭한다.

    사용법> TRUNC(date1, [,fmt])

    예> TRUNC('99-06-25', 'MONTH')  ==> 99-06-01

          TRUNC('99-06-25', 'YEAR')  ==> 99-01-01

   문제> EMP 테이블에서 10번 부서 중 입사한 달의 ROUND와 TRUNC 함수를 비교한다.

      SELECT ename, hiredate, ROUND(hiredate, 'MONTH') m_round,
      TRUNC(hiredate, 'MONTH') m_trunc, ROUND(hiredate, 'YEAR') y_round,
      TRUNC(hiredate, 'YEAR') y_trunc
      FROM emp
      WHERE deptno = 10
      ORDER BY hiredate DESC;


      ENAME                HIREDATE M_ROUND  M_TRUNC  Y_ROUND  Y_TRUNC
      -------------------- -------- -------- -------- -------- --------
      MILLER               82/01/23 82/02/01 82/01/01 82/01/01 82/01/01
      KING                 81/11/17 81/12/01 81/11/01 82/01/01 81/01/01
      CLARK                81/06/09 81/06/01 81/06/01 81/01/01 81/01/01

[출처] 날짜형함수|작성자 이경모


'DB' 카테고리의 다른 글

숫자형 함수  (0) 2009.06.02
DUAL 테이블  (0) 2009.06.02
데이터형 변환  (0) 2009.06.02
TO_CHAR 함수  (0) 2009.06.02
기타 함수  (0) 2009.06.02
Posted by 으랏차
,