-MONTHS_BETWEEN
날짜함수
날짜에 산술 연산자 사용
SELECT ename, (SYSDATE - hiredate)/7 AS wekks FROM emp -- 큰날짜 - 작은날짜
WHERE deptno = 10;
MONTHS_BETWEEN(날짜1,날짜2) : 두 날짜 간의 월 수
큰날짜 작은날짜
SELECT MONTHS_BETWEEN ('2012-03-23','2010-01-23') FROM dual; --26개월 차이
근무 월차
[반올림]
SELECT ename, ROUND(MONTHS_BETWEEN(SYSDATE,hiredate)) months_worked --오늘날 - hiredate
FROM emp ORDER BY months_worked;
[절삭]
SELECT ename, TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)) months_worked --오늘날 - hiredate
FROM emp ORDER BY months_worked;
ADD_MONTHS : 특정 날짜의 월에 정수를 더한 다음 해당 날짜를 반환하는 함수
SELECT ADD_MONTHS('2022-01-01',8) FROM dual; --01월에 8을 더해서 09월이됨.
-NEXT_DAY
NEXT_DAY : 지정된 요일의 다음 날짜
SELECT NEXT_DAY ('2024-03-12', '월요일') FROM dual; --3월 12일은 화요일인데 월요일을 적음으로써 3월 12일 다음으로 올 월요일을 구한다. 다음주인 3월 18일이 나옴
1(일요일) ~ 7(토요일)
SELECT NEXT_DAY('2024-03-12',2) FROM dual; -- 숫자를 입력해도 가능하다.
LAST_DAY : 월의 마지막 날
SELECT LAST_DAY ('2012-11-07') FROM dual;
- EXTRACT
EXTRACT : 날짜 정보에서 특정한 연도, 월,일,시간,분,초 등을 추출
SELECT EXTRACT(YEAR FROM SYSDATE),
EXTRACT(MONTH FROM SYSDATE), --여기선 MONTHS 가 아니라 MONTH임
EXTRACT(DAY FROM SYSDATE) FROM dual;
-실습문제
[실습문제]
1.모든 사원의 이름과 급여를 표시하시오. 급여는 15자 길이로 왼쪽에 $기호가 채워진 형식으로 표기하고 열 레이블은 SALARY로 지정하시오
SELECT ename , LPAD(sal,15,'$') "SALARY" FROM emp;
2.모든 사원의 이름,업무,급여,부서번호를 출력하시오. (부서번호 오름차순 정렬, 사원의 이름은 10자길이 BOOOO**** 형식으로 출력)
SELECT RPAD(ename,10,'*'),job,sal,deptno FROM emp ORDER BY deptno ASC;
3.오늘부터 이번 달의 마지막 날까지의 남은 날 수를 구하시오.
SELECT (LAST_DAY(SYSDATE)-SYSDATE) AS "남은 날 수" FROM dual;
4.각 사원에 대해 사원번호,이름,급여, 및 15% 인상된 급여를 정수(반올림)로 표시하시오. 인상된 급여열의 레이블은 New Salary로 지정
SELECT empno,ename,sal, ROUND(sal*1.15) "New Salary" FROM emp ;