• 4주차 과제 - 함수
  • 실습 환경 : Oracle
  • 해결 날짜 : 2021-03-26

  • 과제

    • 4-1) 날짜형 함수(p. 136)와 명시적 데이터 유형 변환(p. 141) 함수 및 CASE 표현(pp. 145~148)을 참고하고, EMP TABLE의 HIREDATE Column(입사일)을 이용하여 연차를 계산하는 한글질의문과 SQL문을 작성하고 그 결과를 출력하라.(단 기준 날짜는 21.02.20로 이용하세요.)[2점] (연차 계산 예시 : 기준날짜가 2021년 3월 22일이고, 입사날짜가 2020년 3월 23일 사원의 연차는 ‘0년차’이다. 하지만 입사날짜가 2020년 3월 22일인 사원의 연차는 ‘1년차‘가 된다.)

      • 한글 질의문 : EMP 테이블로부터 HIREDATE를 2021.02.20 기준으로 연차를 계산하되, 그 정보를 명시적 데이터 유형 변환 함수 및 CASE 표현을 사용하여 출력하여라.

      • SQL문 :

      SELECT ENAME, HIREDATE,
          CASE WHEN TO_NUMBER(TO_CHAR(HIREDATE,'MM')) < 2
                  THEN 2021-TO_NUMBER(TO_CHAR(HIREDATE,'YYYY'))
              WHEN TO_NUMBER(TO_CHAR(HIREDATE,'MM')) = 2 AND TO_NUMBER(TO_CHAR(HIREDATE,'DD')) <= 20
                  THEN 2021-TO_NUMBER(TO_CHAR(HIREDATE,'YYYY'))
              ELSE 2021-TO_NUMBER(TO_CHAR(HIREDATE,'YYYY'))-1
              END AS 연차
      FROM EMP;
      
      • 실행 결과 :

      image

    • 4-2) [예제3-4]를 변형하여 SEARCHED_CASE_EXPRESSION 표현을 사용하는 한글 질의문과 SQL문을 작성하고 그 결과를 출력하라.(단 PLAYER 테이블을 활용하세요.)

      • 한글 질의문 : PLAYER 테이블로부터 선수들의 키를 190CM, 180CM의 기준을 갖고 나누되, 그 정보를SEARCHED_CASE_EXPRESSION 표현을 사용하여 출력하여라.

      • SQL문 :

      SELECT PLAYER_NAME, HEIGHT,
      CASE WHEN HEIGHT IS NOT NULL THEN (CASE WHEN HEIGHT >= 190 THEN 'OVER 190cm'
                                    WHEN HEIGHT >= 180 THEN 'OVER 180cm'
                                    ELSE 'LESS THAN 180cm'
                                    END)
      END AS 
      FROM PLAYER;
      
      • 실행 결과 :

      image

    • 4-3) [예제3-5]와 [예제4-*]를 참고하여 PLAYER 테이블에서 JOIN_YYYY Column을 이용하여, CASE 중첩과 NVL 사용하는 한글 질의문과 SQL문을 작성하고 그 결과를 출력하라.[2점]

      • 한글 질의문 : PLAYER 테이블로부터 JOIN_YYYY을 이용해 입단정보를 5년, 10년의 기준으로 나누되, 그 정보를 CASE 중첩과 NVL을 사용하여 출력하라.

      • SQL문 :

      SELECT PLAYER_NAME, JOIN_YYYY,
          NVL2(JOIN_YYYY,
          CASE WHEN JOIN_YYYY >= 2016 THEN '최근 5년이내 입단자'
              ELSE(CASE WHEN JOIN_YYYY >= 2011 THEN '최근 10년이내 입단자'
                      ELSE '10년 이상 입단자'
                      END)
          END,
          '모름') AS 입단정보
      FROM PLAYER;
      
      • 실행 결과 :

      image