[Oracle] 오라클 - EXTRACT/MONTHS_BETWEEN/NEXT_DAY
by mini_min[Oracle]
오라클 - EXTRACT/MONTHS_BETWEEN/LAST_DAY/NEXT_DAY
✔️ EXTRACT 추출
날짜에서 필요한 시간/일자를 추출할 때 사용하는 함수
- EXTRACT( { YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | TIMEZONE_HOUR | TIMEZONE_MINUTE | TIMEZONE_REGION | TIMEZONE_ABBR } FROM { expr } )
SELECT EXTRACT(YEAR FROM SYSDATE) FROM dual; SELECT EXTRACT(MONTH FROM SYSDATE) FROM dual; SELECT EXTRACT(DAY FROM SYSDATE) FROM dual;
🔒 문제
--empNo, name, hireDate 이중에서 2010년 이상 입사한 사람 출력 SELECT empNo, name, hireDate FROM emp WHERE EXTRACT(YEAR FROM hireDate) >= 2010;
✔️MONTHS_BETWEEN(date1, date2) : 월수로 반환
두 날짜를 받아서, 두 날짜의 개월 수 차이를 반환한다! <근속년수> 구할 목적으로 사용하면 좋음!
SELECT MONTHS_BETWEEN(TO_DATE('2022-05-20', 'YYYY-MM-DD'), TO_DATE('2022-04-10', 'YYYY-MM-DD')) FROM dual;
--emp 테이블에서 empNo, name, rrn, hireDate, 근속년수 SELECT empNo, name, rrn, hireDate, TRUNC(MONTHS_BETWEEN(SYSDATE, hireDate)/12) 근속년수 FROM emp;
💡 현재 날짜에서 입사일을 빼고 12로 나눠서 근속년수 구함.
--나이 구하기 SELECT TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('1996-04-02', 'YYYY-MM-DD'))/12) FROM dual;
--주민번호로 나이구하기 SELECT TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE(SUBSTR(rrn, 1,6), 'RRMMDD'))/12) 나이 FROM emp;
💡 주민번호로 나이 구할 때, SUBSTR 과 TO_DATE, 사용해서 SYSDATE - (주민번호 생일) 빼서 나이 구함.
✔️ADD_MONTHS
- ADD_MONTHS(date, integer) : 날짜에 월을 더해주는 것
SELECT ADD_MONTHS(SYSDATE, 1) 다음달 FROM dual; SELECT ADD_MONTHS(SYSDATE, -1) 다음달 FROM dual;
-- emp : 6개월 이내 입사한 사람. empNo, name, hireDate SELECT empNo, name, hireDate FROM emp WHERE ADD_MONTHS(SYSDATE, -6) < hireDate;
✔️LAST_DAY(date)
- 말일을 구해주는 함수
SELECT SYSDATE, LAST_DAY(SYSDATE) FROM dual; --이번 달은 말일까지 며칠 남은? SELECT LAST_DAY(SYSDATE) - SYSDATE FROM dual;
✔️NEXT_DAY(date, char)
- char 로 주어진 첫번째 요일 구하기
-- 오늘을 기준으로 가장 가까운 금요일 SELECT SYSDATE, NEXT_DAY(SYSDATE, '금요일') FROM dual; SELECT SYSDATE, NEXT_DAY(SYSDATE, 6) FROM dual; --일요일 :1 토요일:7
--오늘날짜, 이번주 일요일, 이번주 토요일 SELECT SYSDATE, NEXT_DAY(SYSDATE, 1)-7, NEXT_DAY(SYSDATE-1, 7) FROM dual;
💡 요일 순서
일요일이 1번,
마지막 토요일이 7번이다.
블로그의 정보
개발자 미니민의 개발로그
mini_min