ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle-(2022.02.15)-SYSDATE,ADD_MONTHS,NEXT_DAY,LAST_DAY,MONTHS_BETWEEN,ROUND, TRUNC,EXTRACT
    카테고리 없음 2022. 2. 15. 18:57
    728x90

    3. 날짜함수
      1)SYSDATE 사용빈도:***
       -시스템이 제공하는 날짜자료를 반환
       (사용형식)
       SYSDATE 
       .년,월,일,시,분,초 자료 반환
       .덧셈과 뺄셈의 대상
      



       2)ADD_MONTHS
       -주어진 두 날짜자료에서 월을 더한 날짜자료 반환
       (사용형식)
        ADD_MONTHS(d,n)
        .날짜자료 d에 포함된 월에 n을 더한 날짜 반환

    사용예)
       SELECT ADD_MONTHS(SYSDATE,5),
              ADD_MONTHS(SYSDATE,-2)
            FROM DUAL;


     
        3)NEXT_DAY
        -특정 요일에 해당하는 날짜 반환
       (사용형식)
        NEXT_DAY(d, str)
        .날짜 d 이후 맨 처음 만나는 'str'(요일)에 해당하는 날짜 반환
        .STR은 요일을 나타내는 문자열로 '월','월요일','화','화요일',...을 사용
        .처음 만나는 요일 다음 오늘이 화요일이면 오늘날짜가 아닌 다음주 화요일 날짜가 된다.

    사용예)
       SELECT NEXT_DAY(SYSDATE,'화'),
              NEXT_DAY(SYSDATE,'수'),
              NEXT_DAY(SYSDATE,'금요일')
           FROM DUAL;


          
      4)LAST_DAY 사용빈도:**
      -특정 월의 마지막일이 표현된 날짜 반환
      (사용형식)
       LAST_DAY(d)
       . 날짜 d에 포함된 월의 마지막일에 해당하는 날짜를 반환
       . 주로 2월의 마지막일이 28일인지 29일인지 불명확할때 사용
      

    사용예) 매입자료 중 2005년 2월에 매입된 상품별 매입수량을 조회하시오.
           Alias는 상품코드, 상품명, 매입수량
           
           SELECT A.BUY_PROD AS 상품코드, 
                  B.PROD_NAME AS 상품명,
                 SUM(A.BUY_QTY) AS 매입수량
            FROM BUYPROD A, PROD B
            WHERE A.BUY_PROD=B.PROD_ID   --조인기술
              AND A.BUY_DATE BETWEEN TO_DATE('20050201') AND LAST_DAY(TO_DATE('20050201'))
            GROUP BY A.BUY_PROD,B.PROD_NAME
            ORDER BY 1;

            

                                 :

                         데이터 생략


    5)MONTHS_BETWEEN
       -두 날짜자료 사이에 존재하는 개월 수 반환
       (사용형식)
       MONTHS_BETWEEN(d1,d2)
       .d1과 d2 날짜 사이의 개월 수 반환

    사용예)회원테이블에서 회원들의 나이를 XX년 XX월 형식으로 구하여 출력하시오
      SELECT MEM_ID AS 회원번호,
             MEM_NAME AS 회원명,
             MEM_BIR AS 출생년월일,
            TRUNC(MONTHS_BETWEEN(SYSDATE,MEM_BIR)/12) ||'년'||
            MOD(TRUNC(MONTHS_BETWEEN(SYSDATE,MEM_BIR)),12) ||'월' AS 나이
        FROM MEMBER

                         :

                   데이터 생략


    6)ROUND, TRUNC
       -날짜자료의 각 요소(년,월,일,시,분,초)에 대한 반올림과 자리버림 수행
       (사용형식)
       ROUND(d,[,fmt]), TRUNC(d,[,fmt])
       .날짜자료 d를 'fmt'를 기준으로 반올림하거나 자리버림한 결과를 반환
       .'fmt'가 생략되면 '년월일'까지의 기준으로 반올림과 자리버림 수행
       .'fmt'는 YEAR|YY|YYY|YYYY, MONTH|MM, DAY|DD, '월요일',...
       (round() 함수는 12:00을 기준으로 클 경우 다음 날짜의 12:00 반환, trunc() 함수는 무조건 당일의 12:00 반환)

    사용예)    2135 3에서 반올림하면 2100되듯이 뒤에는 초기로 01로 된다.
       SELECT ROUND(SYSDATE,'MM'),ROUND(SYSDATE,'YEAR'),
              TRUNC(SYSDATE,'MM'),TRUNC(SYSDATE,'YEAR'),
              ROUND(SYSDATE,'DD'), -->오후 12시가 넘었으므로 반올림해서 16일 오전이었다면 15일이 나온다.
              TRUNC(SYSDATE,'DD'), -->시간을 버려버림
              TO_CHAR(ROUND(SYSDATE), 'YYYY-MM-DD HH24:MI:SS'), -->오후이면 16일이되어지고 년원일 까지 기준으로 출력
              TO_CHAR(TRUNC(SYSDATE), 'YYYY-MM-DD HH24:MI:SS')  
        FROM DUAL;

    출저: https://rimkongs.tistory.com/

     

     

     


    7)EXTRACT
        -날짜표현 요소 중 특정 요소를 추출하여 반환
        -반환되는 데이터 타입은 숫자
        (사용형식)
        EXTRACT(fmt FROM d)
         .주어진 날짜자료 d에서 fmt로 표현된 요소가 반환 ,d는 무조건 날짜자료형
         .fmt는 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND

    사용예)매입테이블에서 2005년 3월 일자별 매입집계를 조회하시오
          Alias는 일자, 매입수량, 매입금액
       SELECT  BUY_DATE AS 일자,
               SUM(BUY_QTY) AS 매입수량,
               SUM(BUY_COST * BUY_QTY) AS 매입금액
            FROM BUYPROD
         WHERE EXTRACT(YEAR FROM BUY_DATE)=2005
           AND EXTRACT(MONTH FROM BUY_DATE)=3
        GROUP BY BUY_DATE
        ORDER BY 1;

    사용예)회원테이블에서 연령대별 마일리지 합계를 구하시오
          Alias는 연령대, 마일리지 합계 
          SELECT TRUNC(EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM MEM_BIR),-1)||'대' AS 연령대,
                 COUNT(*)||'명' AS 회원수,
                 SUM(MEM_MILEAGE) AS 마일리지합계
            FROM MEMBER
            GROUP BY TRUNC(EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM MEM_BIR),-1)
            ORDER BY 1;

    TRUNC(EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM MEM_BIR),-1)||'대' -1해준이유는 22살에서 2를버리고 20대로 해줄 수 있기 때문 

    사진참고 및 출처: https://kkkapuq.tistory.com/106


     

    728x90
Designed by Tistory.