-
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