데이터베이스/ORACLE

15. 날짜 함수 ( DATE_FUNCTION )

JEONGGI 2021. 3. 16. 13:19

1. 날짜 함수

1) SYSDATE

  • 시스템이 제공하는 날짜 정보(년, 월, 일, 시, 분, 초)
  • 덧셈과 뺄셈의 대상이 될 수 있다.('/'와 '*'는 허용되지 않음)
  • 출력은 년월일까지만 출력(시분초까지 출력하기 위하여 TO_CHAR함수가 필요)

예제) 사원들의 입사일을 기준으로 오늘 날짜에서 한 달 이내에 입사한 사원들에게 특별 상여금을 지급하려 한다.
        Alias는 사원번호, 이름, 부서 번호, 급여, 상여금, 지급액 단, 상여금은 본봉의 10%이다.

SELECT EMPLOYEE_ID AS 사원번호,
       EMP_NAME AS 이름,
       DEPARTMENT_ID AS 부서번호,
       HIRE_DATE AS 입사일,
       SALARY AS 급여,
       SALARY *0.1 AS 상여금,
       SALARY + (SALARY*0.1) AS지급액
  FROM EMPLOYEES
 WHERE EXTRACT(MONTH FROM HIRE_DATE) = EXTRACT(MONTH FROM SYSDATE); -- 날짜로 부터 월을 추출하세요

 

예제)

SELECT SYSDATE, SYSDATE-10, SYSDATE+10 FROM DUAL;

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),   -- 시분초까지 출력하기위해서 TO_CHAR 사용한다.
       TO_CHAR(SYSDATE-10,'YYYY-MM-DD HH24:MI:SS'),
       TO_CHAR(SYSDATE+10,'YYYY-MM-DD HH24:MI:SS') 
  FROM DUAL;

 

2) ADD_MONTHS

  • 주어진 날짜 정보에 개월 수를 더한 날짜를 반환

( 사용 형식 )

ADD_MONTHS(d, n)
   . 'd'날에 'n'개월을 더한 날짜 반환

 

예제) 회원들의 생일을 조회하여 현재 달과 한 달 전, 한 달 후 생일인 회원을 조회하시오
       ( Alias는 회원명, 생년월일, 마일리지 )

SELECT MEM_NAME AS 회원명,
       MEM_BIR AS 생년월일,
       MEM_MILEAGE AS 마일리지
  FROM MEMBER
 WHERE EXTRACT(MONTH FROM MEM_BIR) =
       EXTRACT(MONTH FROM ADD_MONTHS(SYSDATE, -1))  -- 한달전
    OR EXTRACT(MONTH FROM MEM_BIR) =
       EXTRACT(MONTH FROM ADD_MONTHS(SYSDATE, 1))  -- 한달후 
    OR EXTRACT(MONTH FROM MEM_BIR) =
       EXTRACT(MONTH FROM SYSDATE);

 

예제) 사원들의 입사일을 이용하여 정식직원으로 발령된 일자를 조회하시오
        정식 발령일은 입사 후 3개월의 수습기간이 지난 일자이다.
        ( Alias는 사원번호, 사원명, 입사일, 발령일, 부서 번호 )

SELECT EMPLOYEE_ID AS 사원번호,
       EMP_NAME AS 사원명,
       HIRE_DATE AS 입사일,
       ADD_MONTHS (HIRE_DATE, 3) AS 발령일,
       DEPARTMENT_ID AS 부서번호
  FROM EMPLOYEES

 

3) EXTRACT

  • 주어진 날짜 정보에서 필요란 부분(년, 월, 일, 시, 분, 초)을 추출할 때 사용

( 사용 형식 )

EXTRACT(fmt FROM d)
   . 'fmt' : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 이다.

 

예제) 오늘이 2010년 6월 15일이라 가정하고 사원 테이블에서 5년 이상 근속한 사원 정보를 추출하시오
        ( Alias는 사원번호, 사원명, 입사일, 부서 코드, 직무 코드이다. )

SELECT EMPLOYEE_ID AS 사원번호,
       EMP_NAME AS 사원명,
       HIRE_DATE AS 입사일,
       DEPARTMENT_ID AS 부서코드,
       JOB_ID AS 직무코드
  FROM EMPLOYEES
 WHERE EXTRACT(YEAR FROM TO_DATE('20100615')) - EXTRACT(YEAR FROM HIRE_DATE) >= 5;

-- WHERE (EXTRACT(YEAR FROM SYSDATE)-10) - EXTRACT(YEAR FROM HIRE_DATE) >= 5;

 

4) MONTHS_BETWEEN

  • 주어진 두 날짜 데이터 사이의 개월 수를 반환

( 사용 형식 )

MONTHS_BETWEEN(d1, d2)

 

예제) 회원들의 생년월일(MEM_BIR) 자료와 오늘 날짜를 이용하여 나이를 개월 수로 조회하시오
        ( Alias는 이름, 생년월일, 경과된 개월 수 )

SELECT MEM_NAME AS 이름,
       MEM_BIR AS 생년월일,
       ROUND(MONTHS_BETWEEN(SYSDATE, MEM_BIR)) AS 경과된개월수,
       TRUNC(ROUND(MONTHS_BETWEEN(SYSDATE, MEM_BIR))/12) AS 나이
  FROM MEMBER;

 

2._date_function.sql
0.00MB