날짜 처리 함수
-- 날짜 처리 함수
-- LAST_DAY(d) : (d)달의 마지막 날 표시
select sysdate, last_day(sysdate) from dual;
select ename, hiredate, last_day(hiredate) from emp; -- 입사한 달의 마지막 날
--ADD_MONTHS(a, b) : a 날짜에 b의 값을 더한 달을 표시
select sysdate, add_months(sysdate, 5) from dual; -- 오늘을 기준으로 5개월 뒤
select add_months('2017-01-31', 1) from dual; -- 17년 1월 31일을 기준으로 1개월 뒤
select add_months(sysdate, -3) from dual; -- 오늘을 기준으로 3개월 전
-- emp 테이블의 사원의 입상후 20개월 후는 언제인가?
select * from emp;
select ename, hiredate, add_months(hiredate, 20) from emp;
-- MONTHS_BETWEEN(a1, a2) : 날짜와 날짜 사이의 개월수 구하기
select floor(months_between('2016/12/10', '2017/02/25')) from dual;
-- emp 테이블의 사원은 근무기간은 몇개월인가?
select * from emp;
select ename, hiredate, ceil(months_between(sysdate, hiredate)) 근속개월 from emp;
-- ROUND(d, [f]) : 날짜의 반올림 / year, month, day
-- TO_DATE() : 문자열을 날짜로 변환
-- 년도를 기준으로 반올림(7월)
select round(to_date('2016/08/01', 'yyyy/mm/dd'), 'year') from dual;
select * from empcopy;
update empcopy set hiredate='2016/10/10' where empno=6666;
select round(sysdate, 'year') from dual;
-- 입사일 기준 년도를 반올림하여 출력하라.
-- 사원명, 입사일, 반올림한 년도
select * from emp;
select ename 사원명, hiredate 입사일, round(hiredate, 'year') 반올림년도 from emp;
-- 월을 기준으로 반올림
select round(sysdate, 'month') from dual; -- 오늘 기준
select round(to_date('2016/10/17'), 'month') from dual; -- 특정일 기준
select ename, hiredate, round(hiredate, 'month') from emp; -- emp 테이블 입사일 기준
-- 일을 기준으로 반올림
-- TO_CHAR() : 날짜나 숫자를 문자로 변환
select round(sysdate, 'day') from dual;
select to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss pm') from dual;
-- EMP 입사일의 날짜를 반올림하라.
-- 출력은 이름, 입사일, 반올림한 입사일
-- 입사일은 mm/dd hh24:mi:ss 표시
select * from emp;
select ename 사원명, to_char(hiredate, 'mm/dd hh24:mi') 입사일, round(hiredate, 'dd') 반올림 from emp;
-- 날짜에 대한 산술연산
-- 오늘을 기준으로 1000일 후
select sysdate+1000 from dual;
-- 문자형으로 출력
select to_char(sysdate+1000, 'yyyy-mm-dd hh') from dual;
-- 오늘을 기준으로 100일 전
select sysdate-100 from dual;
-- 2016-11-23 기준으로 960일 후는 언제인가?
select to_date('2016/11/23')+960 from dual;
select to_date('2016-11-23', 'yyyy-mm-dd')+960 from dual;
-- 날짜 경과 계산
select sysdate - to_date('2016/11/23', 'yyyy/mm/dd') from dual;
-- emp 테이블의 사원중 부서코드가 30 사원의 근무일수를 구하라.
-- 사원명, 입사일, 급여, 근무일수, 부서코드
select * from emp;
select ename 사원명, hiredate 입사일, sal 급여, ceil(sysdate-hiredate) 근무일수, deptno 부서코드 from emp where deptno=30;