1. sysdate : 오늘의 날짜와 시간 출력(인수 없음)
** 날짜 연산
- oracle에서는 날짜 + 숫자, 날짜 - 숫자 가능
- 날짜 - 날짜 : 두 날짜 사이 일(day) 수 리턴
select sysdate + 100 as "100일 이후",
sysdate - 100 as "100일 이전"
from dual;
select ename, sysdate, hiredate,
trunc(sysdate - hiredate) as 근무일수,
trunc((sysdate - hiredate)/365) as 근속연수
from emp;
다음과 같은 식으로 trunc를 이용해서 시간을 다 날려버릴 수 있다.
2. add_months : 월 연산
** 사용법 : add_months(날짜,n)
- n > 0, n개월 이후 날짜 리턴
- n < 0, n개월 이전 날짜 리턴
예) 오늘날짜로부터 3개월 이후 날짜
select sysdate,
sysdate + 3*30, -- 잘못된 날짜 연산 결과
add_months(sysdate,3) -- 정확한 날짜 연산 결과
from dual;
확인해보면
두 날짜가 다름을 알 수 있는데 가운데 출력된것은 부정확한 날짜이다.
매 달이 30일로 고정이 아니기 때문.
3. months_between : 두 날짜 사이의 개월수 리턴
** 사용법 : months_between(날짜1, 날짜2)
- 날짜1 > 날짜2 : 양수 리턴
- 날짜1 < 날짜2 : 음수 리턴
select ename, sysdate, hiredate,
months_between(sysdate, hiredate) as 입사개월수,
months_between(hiredate, sysdate) as 입사개월수2
from emp;
4. next_day : 돌아오는 특정 요일 날짜 리턴
** 사용법 : next_day(날짜,요일)
- 요일 전달 방법 : 한글, 한글축약형, 영문, 영문축약형, 숫자
- 일요일(1), 월요일(2), 화요일(3), ....
날짜 언어가 한글일 경우
alter session set nls_date_language = 'korean';
select sysdate,
next_day(sysdate,'금요일'),
next_day(sysdate,'금'),
next_day(sysdate,1) -- 돌아오는 일요일 날짜 리턴
from dual;
날짜 언어가 영어일 경우)
alter session set nls_date_language = 'american';
select sysdate,
next_day(sysdate,'FRI')
from dual;
5. last_day : 특정 날짜가 포함된 월의 마지막 날짜 리턴
** 사용법 : last_day(날짜)
select sysdate, last_day(sysdate)
from dual;
6. round / trunc : 날짜의 반올림, 버림 수행
** 사용법 : round(날짜[, 자리수])
- 자리수 : month, year
- 자리수 생략 시 시간 단위에서 반올림/버림 진행
select sysdate,
round(sysdate),
trunc(sysdate),
round(sysdate, 'month'),
trunc(sysdate, 'month'),
round(sysdate, 'year'),
trunc(sysdate, 'year')
from dual;
다음과 같은 결과를 얻을 수 있다.
** 주의 : round, trunc 사용 시 반올림 또는 내림 자리수에 'day' 사용 금지
select sysdate,
round(sysdate), -- 2024/10/18 00:00:00
round(sysdate,'day') -- 2024/10/20 00:00:00(시간단위에서 반올림 한 날짜 리턴 불가)
from dual;
그러므로 내림 자리수에 'day'를 사용하면 결과가 이상하게 나오게 된다.
[ 연습 문제 ]
1. EMP 테이블에서 10번 부서원의 현재까지의 근무 월수를 계산하여 출력
select ename, hiredate,
trunc(months_between(sysdate,hiredate)) as 근무월수
from emp
where deptno = 10;
2. EMP 테이블에서 입사한 달의 남은 근무 일수를 계산하여 출력하여라.
-- 단, 토요일과 일요일도 근무일수에 포함한다.
select ename, hiredate, last_day(hiredate),
last_day(hiredate) - hiredate as 나머지근무일수
from emp;
3. EMP 테이블에서 각 직원의 이름, 입사일, 급여검토일 출력
-- 단, 급여검토일은 입사날짜로부터 100일 뒤 돌아오는 월요일
alter session set nls_date_language = 'korean';
select ename, hiredate, next_day(hiredate + 100, '월요일')
from emp;
'SQL' 카테고리의 다른 글
11.변환함수(2) (1) | 2024.10.18 |
---|---|
10. 변환함수(1) (0) | 2024.10.18 |
8. 일반함수(2), 숫자함수 (0) | 2024.10.18 |
7. 일반함수(1) (1) | 2024.10.16 |
6. 문자열 함수(2) (2) | 2024.10.16 |