날짜와 관련된 함수
: DATE 타입 - 연도, 월, 일, 시, 분, 초를 모두 포함한 자료형
(1) SYSDATE
: 현재 시스템의 날짜를 반환한다.
SELECT SYSDATE
FROM DUAL; -- 현재 시스템 날짜 출력 22/03/21
(2) MONTHS_BETWEEN
: MONTHS_BETWEEN(DATE1, DATE2) - 두 날짜 사이의 개월 수를 반환한다.
- 결과값은 숫자(NUMBER)로 반환된다.
- DATE2가 먼 미래의 날짜라면 음수로 반환된다.
- 직원들의 근무일수와 근무월수 반환하기
SELECT EMP_NAME
, FLOOR(SYSDATE - HIRE_DATE) || '일' "근무일수"
, FLOOR(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)) || '월' "근무월수"
FROM EMPLOYEE;
(3) ADD_MONTHS
: ADD_MONTHS(DATE, NUMBER) - 특정 날짜에 해당 숫자 만큼 개월 수롤 더해서 반환한다.
- 결과값은 DATE 타입으로 반환된다.
SELECT ADD_MONTHS(SYSDATE, 3)
FROM DUAL; -- 22/06/21
SELECT SYSDATE + 100 "100일 후"
FROM DUAL; -- 22/06/29
(4) NEXT_DAY
: NEXT_DAY(DATE, 요일(문자/숫자)) - 특정 날짜에서 가장 가까운 요일을 찾아 그 날짜를 반환한다.
- 결과값은 DATE 타입으로 반환된다.
- 요일을 문자로 입력 시
SELECT NEXT_DAY(SYSDATE, '토요일')
FROM DUAL; -- 22/03/26
-- '토요일' 외에 '토'라고 입력해도 된다.
-- 그러나 'SAT'이나 'SATURDAY'는 안된다. 왜냐하면 언어 설정이 한국어로 되어 있기 때문이다.
-- 이는 언어 설정을 AMETICAN으로 바꾸면 가능하다. 바꾼 후엔 영어 문자만 가능하다.
-- 영어로 언어 변경 ARTER SESSION SET NLS_LANGUAGE = AMERICAN;
-- 한국어로 언어 변경 ARTER SESSION SET NLS_LANGUAGE = KOREAN;
- 요일을 숫자로 입력 시
1: 일, 2: 월, 3: 화, 4: 수, 5: 목, 6: 금, 7: 토
SELECT NEXT_DAY(SYSDATE, 7)
FROM DUAL; -- 22/03/26 -- 토요일
(5) LAST_DAY
: LAST_DAY(DATE) - 해당 특정 날짜 월의 마지막 날짜를 구해서 반환한다.
- 결과값은 DATE 타입으로 반환한다.
SELECT LAST_DAY(SYSDATE)
FROM DUAL; -- 22/03/31
(6) EXTRACT
: 연도 또는 월, 일 정보를 추출하여 반환한다.
- EXTRACT(YEAR FROM DATE) : 특정 날짜로부터 연도만 추출한다.
- EXTRACT(MONTH FROM DATE) : 특정 날짜로부터 월만 추출한다.
- EXTRACT(DAY FROM DATE) : 특정 날짜로부터 일만 추출한다.
SELECT EXTRACT(YEAR FROM SYSDATE) "연도"
, EXTRACT(MONTH FROM SYSDATE) "월"
, EXTRACT(DAY FROM SYSDATE) "일"
FROM DUAL;