Programming/오라클[SQL]

오라클[sql] 날짜형

콩king 2022. 8. 22. 11:55

날짜형

- 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;