[Oracle] 함수 :: 날짜 시간 함수(date time function)
by 캐떠린날짜 시간 함수
1. sysdate
- 현재 시스템의 시각을 반환
- Java의 'Calendar.getInstance()'와 동일한 역할
- date sysdate
SELECT sysdate FROM dual;
2. last_day(날짜)
- 특정 날짜의 마짐가 일을 반환(해당 월이 몇일까지 있는지 확인할 때)
SELECT
sysdate,
last_day(sysdate) -- 해당 날짜 포함된 마지막 날짜 반환(해당 월이 며칠까지?)
FROM dual;
3. add_months(date, 시간)
- 시각 + 시간(월) = 시각
4. months_between(date, date)
- 시각 - 시각 = 시간(월)
날짜 연산
1. 시각 - 시각 = 시간
2. 시각 + 시간 = 시각
3. 시각 - 시간 = 시각
1. 시각 - 시각 = 시간(일)
SELECT
name,
ibsadate,
round(sysdate - ibsadate) AS 근무일수, -- 홍길동의 입사일: 1998-10-11, 오늘 - 입사일: 9088.6일
round((sysdate - ibsadate) / 365) AS 근무년수, --사용 금지 > 윤년 계산을 못하므로 올바른 수치가 아님.
round((sysdate - ibsadate) * 24) AS 근무시수,
round((sysdate - ibsadate) * 24 * 60) AS 근무분수,
round((sysdate - ibsadate) * 24 * 60 * 60) AS 근무초수
FROM tblinsa;
-- 오라클 > 식별자 최대 길이 > 30바이트(UTF-8)
-- ORA-00972: identifier is too long
SELECT
title,
adddate,
completedate,
round((completedate - adddate) * 24) AS 실행하기까지걸린시간
FROM tbltodo
WHERE completedate IS NOT null
ORDER BY round((completedate - adddate) * 24) DESC ;
위 결과를 통해 시각 - 시각 = 시간(일)은 월, 년 환산이 불가능함을 알 수 있다. 아래의 함수를 사용하면 정확하게 계산할 수 있다.
months_between(date, date)
- 시각 - 시각 = 시간(월)
- 사용 예시
SELECT
name,
round(sysdate - ibsadate) AS "근무일수",
round((sysdate - ibsadate) / 30) AS "근무월수", -- 30으로 나누는 것은 정확한 수치가 아님. > months_between() 사용하자!
round(months_between(sysdate, ibsadate)) AS "근무월수",
round(months_between(sysdate, ibsadate) / 12) AS "근무년수"
FROM tblinsa;
2 & 3. 시각 ± 시간(일) = 시각
SELECT
sysdate,
sysdate + 100 AS "100일뒤",
sysdate - 100 AS "100일전",
sysdate + (3/24) AS "3시간 후",
sysdate - (5/24) AS "5시간 전",
sysdate + (30/60/24) AS "30분 뒤"
FROM dual;
아래의 함수를 사용하면 정확하게 특정 시각으로부터 몇개월 전/후를 계산할 수 있다.
add_months(date, 시간)
- 시각 + 시간(월) = 시각
- 사용 예시
SELECT
sysdate,
add_months(sysdate, 3) AS "3개월 후",
add_months(sysdate, -2) AS "2개월 전",
add_months(sysdate, 5 * 12) AS "5년 뒤"
FROM dual;
정리
시각 - 시각
1. 일, 시, 분, 초 → 연산자(-)
2. 월, 년 → months_between()
시각 ± 시간
1. 일, 시, 분, 초 → 연산자(+, -)
2. 월, 년 → add_months()
*글 작성에 참고한 내용: 학원 쌤의 열정적인 수업
'DB > Oracle' 카테고리의 다른 글
[Oracle] 시퀀스(Sequence) (0) | 2024.03.18 |
---|---|
[Oracle] DDL (0) | 2024.03.18 |
[Oracle] 함수 :: 형변환 함수(casting function) (0) | 2024.03.18 |
[Oracle] 함수 :: 문자열 함수(String Function) (1) | 2024.03.16 |
[Oracle] 함수 :: 숫자 함수, 수학 함수(Numerical Function) (3) | 2024.03.16 |
블로그의 정보
All of My Records
캐떠린