오라클[sql] 날짜형
날짜형
- SYSDATE : 현재날짜를 반환하는 함수, 키워드
- MONTHS_BETWEEN : 날짜간의 개월수를 구하는 함수
- ADD_MONTHS : 특정개월수를 더하는 함수
- NEXT_DAY : 오늘기준으로 가장가까운 요일의 날짜를 알려줌
- LAST_DAY : 해당월의 마지막날짜를 반환
날짜연산
- 날짜 + 숫자 : 날짜 기준으로 그 기간만큼 지난 날짜
- 날짜 - 숫자 : 날짜 기준으로 그 기긴만큼 이전 날짜
- 날짜 - 날짜 : 두 날짜 사이의 기간
SYSDATE
- 현재날짜를 반환하는 함수, 키워드
- 현재시스템의 날짜를 읽어와서 출력
SELECT sysdate FROM dual;
SELECT SYSDATE-1 어제
, SYSDATE 오늘
, SYSDATE+1 내일
FROM dual;
MONTHS_BETWEEN
- 날짜간의 개월수를 구하는 함수
SELECT ename, SYSDATE, hiredate, MONTHS_BETWEEN(SYSDATE, hiredate) 근무개월수
FROM emp;
ADD_MONTHS
- 특정개월수를 더하는 함수
SELECT ename, hiredate, ADD_MONTHS(hiredate, 4) FROM emp;
NEXT_DAY
- 오늘기준으로 가장가까운 요일의 날짜를 알려줌
SELECT SYSDATE, NEXT_DAY(SYSDATE, '화요일') FROM dual;
SELECT SYSDATE, NEXT_DAY(SYSDATE, '화') FROM dual;
SELECT SYSDATE, NEXT_DAY(SYSDATE, 'TUE') FROM dual;
SELECT SYSDATE, NEXT_DAY(SYSDATE, 1) FROM dual;
- DB에서는 요일이 일요일기준 1부터 시작
LAST_DAY
- 해당월의 마지막날짜를 반환
SELECT LAST_DAY(SYSDATE) FROM dual;
SELECT hiredate, LAST_DAY(hiredate) FROM emp;
예제
1. 현재까지 근무일 수가 많은 사람 순으로 출력
SELECT * FROM emp
ORDER BY MONTHS_BETWEEN(SYSDATE, hiredate) DESC;
2. 현재까지 근무일 수가 몇 주 몇 일인가를 출력
SELECT sysdate-hiredate FROM emp;
SELECT FLOOR((SYSDATE-hiredate)/7) || '주 '|| FLOOR(MOD((SYSDATE-hiredate), 7)) || '일' AS "근무일"
FROM emp;
SELECT ROUND((SYSDATE-HIREDATE)/7) AS 근무주, ROUND(SYSDATE-HIREDATE) AS 근무일
FROM EMP;
3. 10번 부서의 사원의 현재까지의 근무 월수를 계산
SELECT FLOOR(MONTHS_BETWEEN(SYSDATE, hiredate)) FROM emp
WHERE deptno = 10;
4. 현재 날짜에서 3개월 후의 날짜 구하기
SELECT SYSDATE, ADD_MONTHS(SYSDATE, 3) FROM dual;
5. 현재 날짜에서 돌아오는 ‘월’요일의 날짜 구하기
SELECT NEXT_DAY(SYSDATE, '월') FROM dual;
6. 현재 날짜에서 해당 월의 마지막 날짜 구하기
SELECT LAST_DAY(SYSDATE) FROM dual;