ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle - 날짜함수의 모든 것
    DataBase/Oracle 2024. 8. 12. 00:17
    반응형

     

    현재 날짜 구하기

    SELECT SYSDATE FROM dual;

    현재 날짜를 기준으로 하여 년, 월, 일, 시, 분, 초 까지 확인이 가능하다.

     

    날짜 더하기 빼기

    SELECT sysdate, SYSDATE - 10000, SYSDATE + 10000 FROM dual;

    특정 시간에서 - , + 를 이용하여 날짜를 더하거나 빼기가 가능하다. 여기서 숫자의 경우 일자로 계산이 된다.

     

    SELECT SYSDATE - HIREDATE FROM EMP;
    SELECT TRUNC(SYSDATE - HIREDATE) FROM EMP;

    위의 예제는사원들의 입사일로부터 근무한 일수를 구한다. 

    시, 분, 초 까지 모두 포함되어 나오기에 보기 좋게 TRUNC를 사용하였다.

     

     

    반올림하여 날짜 구하기

     

    -CC 년 기준

    SELECT ROUND(SYSDATE, 'CC') AS "년도 두자리" FROM DUAL;

    CC 옵션은 세기를 기준으로 날짜를 반올림합니다.

     

    • 세기의 시작(예: 2000년 1월 1일)에서 현재 날짜까지의 기간이 세기의 중간(예: 2050년)보다 이전이라면, 그 세기의 시작으로 반올림됩니다.
    • 반대로, 중간을 넘었다면 다음 세기의 시작(예: 2100년 1월 1일)으로 반올림됩니다.
    • Oracle의 ROUND 함수는 세기(Century) 기준으로 반올림할 때 0이 아닌 값을 버림 처리하지 않고 1년 단위로 반올림하기 때문에, ROUND(SYSDATE, 'CC')의 결과가 2001년 1월 1일로 나타나는 것은 정상적인 동작입니다. 이는 21세기의 첫 해(2000년)보다 큰 1년 단위의 반올림으로 인식되었기 때문입니다.

     

    -YYYY 월 기준

     

    SELECT ROUND(SYSDATE, 'YYYY') AS "월 기준" FROM DUAL;

     

    반올림 기준: 날짜를 연도 단위로 반올림할 때, 기준이 되는 것은 해당 날짜의 "월"입니다.

    • 상반기: 1월부터 6월까지의 날짜는 그 해의 시작(1월 1일)으로 반올림됩니다.
    • 하반기: 7월부터 12월까지의 날짜는 다음 해의 시작(1월 1일)으로 반올림됩니다.
    • 만약 SYSDATE가 2024년 8월 11일이라고 가정하면:
      • 8월은 하반기에 속하므로, ROUND(SYSDATE, 'YYYY')는 2025년 1월 1일로 반올림됩니다.
    • 반면, 만약 SYSDATE가 2024년 3월 11일이라면:
      • 3월은 상반기에 속하므로, ROUND(SYSDATE, 'YYYY')는 2024년 1월 1일로 반올림됩니다.

     

    -DDD 시 기준

    SELECT ROUND(SYSDATE, 'DDD') AS "시 기준" FROM DUAL;

     

    반올림 기준: 반올림 시 **시간(Hour)**을 기준으로 결정됩니다.

    • 만약 시간이 12시(정오) 이후라면 다음 날로 반올림되고, 12시 이전이라면 현재 날짜로 반올림됩니다.
    • 예를 들어, 2024년 8월 11일 14:30이라면, 결과는 2024년 8월 12일로 반올림됩니다.

     

    -HH 분 기

    SELECT ROUND(SYSDATE, 'HH') AS "분 기준" FROM DUAL;

     

    반올림 기준: 반올림 시 **분(Minute)**을 기준으로 결정됩니다.

    • 만약 분이 30분 이상이라면 다음 시간으로 반올림되고, 30분 미만이라면 현재 시간으로 반올림됩니다.
    • 예를 들어, 2024년 8월 11일 14:45이라면, 결과는 2024년 8월 11일 15:00로 반올림됩니다.

     

    -MM 일 기

    SELECT ROUND(SYSDATE, 'MM') AS "일 기준" FROM DUAL;

     

    반올림 기준: 반올림 시 **일(Day)**을 기준으로 결정됩니다.

    • 만약 해당 월의 일자가 15일 이상이라면 다음 달로 반올림되고, 15일 미만이라면 현재 달의 1일로 반올림됩니다.
    • 예를 들어, 2024년 8월 16일이라면, 결과는 2024년 9월 1일로 반올림됩니다.

     

    -DAY 주 기

    SELECT ROUND(SYSDATE, 'DAY') AS "주 기준"  FROM DUAL;

     

    반올림 기준: 반올림 시 요일을 기준으로 결정됩니다.

    • 주의 중간을 넘어서면(목요일 이후) 다음 주의 월요일로 반올림되고, 그렇지 않으면 현재 주의 월요일로 반올림됩니다.
    • 예를 들어, 2024년 8월 14일(수요일)이라면, 결과는 2024년 8월 12일(월요일)로 반올림됩니다.

     

    -MI 초 기

    SELECT ROUND(SYSDATE, 'MI') AS "초 기준" FROM DUAL;

    반올림 기준: 반올림 시 **초(Second)**를 기준으로 결정됩니다.

    • 만약 초가 30초 이상이라면 다음 분으로 반올림되고, 30초 미만이라면 현재 분으로 반올림됩니다.
    • 예를 들어, 2024년 8월 11일 14:30:45이라면, 결과는 2024년 8월 11일 14:31:00로 반올림됩니다.

     

    버림하여 날짜 구하기

    SELECT SYSDATE FROM DUAL;
    SELECT TRUNC(SYSDATE, 'CC') AS "년도 두자리" FROM DUAL;
    SELECT TRUNC(SYSDATE, 'YYYY') AS "월 기준" FROM DUAL;
    SELECT TRUNC(SYSDATE, 'DDD') AS "시 기준" FROM DUAL;
    SELECT TRUNC(SYSDATE, 'HH') AS "분 기준" FROM DUAL;
    SELECT TRUNC(SYSDATE, 'MM') AS "일 기준" FROM DUAL;
    SELECT TRUNC(SYSDATE, 'DAY') AS "주 기준" FROM DUAL;
    SELECT TRUNC(SYSDATE, 'MI') AS "초 기준" FROM DUAL;

    버림의 경우도 ROUND 와 동일하게 계산되어 값이 버려진다.

     

    예시를 잠시 보도록하자.

    예시의 경우 '1981년도에 입사한 사원들의 사원번호, 사원 이름, 급여, 입사일을 가져온다'

    SELECT EMPNO, ENAME, SAL, HIREDATE 
    FROM EMP 
    WHERE HIREDATE >= '1981/01/01' AND HIREDATE <= '1981/12/31';
    
    
    SELECT EMPNO, ENAME, SAL, HIREDATE 
    FROM EMP 
    WHERE HIREDATE BETWEEN '1981/01/01' AND '1981/12/31';
    
    
    SELECT EMPNO, ENAME, SAL, HIREDATE 
    FROM EMP 
    WHERE TRUNC(HIREDATE, 'YYYY') = '1981/01/01';

    이렇게 총 3가지의 경우로 출력이 가능하다. 

     

    개월 수 더하기 ADD_MONTHS

    SELECT SYSDATE + 100, ADD_MONTHS(SYSDATE, 100) FROM DUAL;

    이 같은 경우 ADD_MONTHS를 사용하여 100개월 후의 날짜 계산이 가능하다.

     

    지정된 날짜를 기준으로 지정된 요일 구하기

    SELECT SYSDATE, NEXT_DAY(SYSDATE, '월요일') FROM DUAL;

    NEXT_DAY를 사용하여 다주의 월요일 일정을 구할 수 있다.

     

     

    지정 된 날짜의 월 마지막 날짜를 구하기

    SELECT SYSDATE, LAST_DAY(SYSDATE) FROM DUAL;

    LAST_DAY를 사용하여 지정된 날짜에 해당하는 달의 마지막 날짜를 구할 수 있다.

     

    TO_CHAR

    SELECT SYSDATE, TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS AM') FROM DUAL;
    SELECT SYSDATE, TO_CHAR(SYSDATE, 'YYYY년 MM월') --해당 FORM에는 한글이 들어갈 수 없다.

    TO_CHAR를 사용하여 오라클 데이터를 프로그램 데이터로 사용할때 주로 사용한다. 

    SYSDATE를 'YYYY-MM-DD HH:MI:SS AM' 이와 같은 폼으로 프로그램에게 전달이 가능하다.

    여기서 한글은 입력이 될 수 없다.

     

     

    TO_DATE

    SELECT TO_DATE('2018-01-01 11:30:12 오후', 'YYYY-MM-DD HH:MI:SS AM') FROM dual;

    TO_DATE의 경우 프로그램 데이터를 오라클 데이터 베이스로 저장하는 경우 주로 사용한다.

     

    예시를 한번 알아보자.

    SELECT HIREDATE, TO_CHAR(HIREDATE, 'YYYY-MM-DD') FROM EMP;

    이와 같은 경우 사원들의 입사날짜를 'YYYY-MM-DD' 이와 같은 폼으로 가지고 오는 경우이다.

    반응형

    'DataBase > Oracle' 카테고리의 다른 글

    Oracle - Having  (0) 2024.08.13
    Oracle - Group by  (0) 2024.08.13
    Oracle - 그룹함수 (avg, sum, min, max)  (0) 2024.08.12
    Oracle - DECODE, CASE 함수  (0) 2024.08.12
    Oracle 문자열 함수의 모든것  (0) 2024.08.11

    댓글

Designed by Tistory.