-- 날짜 처리 함수


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

'응용 SoftWare > Oracle' 카테고리의 다른 글

그룹 함수  (0) 2017.01.03
변환 함수  (0) 2017.01.03
General Function  (0) 2017.01.02
[예제] 이메일에서 아이디와 도메인 분리하기  (0) 2016.12.30
문자열 처리 함수  (0) 2016.12.30
Posted by Hyun CHO
,