2. ---- EMP 테이블에서 입사년도가 1981년보다 큰 사원의 사번, 이름 추출
SQL> select empno, ename from emp
2 where extract(year from hiredate) > 1981
3 order by hiredate;
EMPNO ENAME
---------- ----------
7934 MILLER
7788 SCOTT
7876 ADAMS
-- 오늘부터 100일 후는?
SQL> select sysdate+100 from dual;
SYSDATE+
--------
14/12/17
SQL기초강좌_숫자 및 날짜함수
3. -- 현재월의 마지막 날을 반환 하는 예문 이다.
SQL> select last_day(sysdate) from dual;
LAST_DAY
--------
14/09/30
-- EMP 테이블에서 사원들의 근속월수, 첫째 자리에서 절삭, months_between은 앞에
서 뒤날자를 뺀다.
SQL> select ename, hiredate, sysdate, trunc(months_between(sysdate, hiredate))
from emp;
ENAME HIREDATE SYSDATE TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE))
---------- -------- ---------- ---------------------------------------
SMITH 80/12/17 14/09/08 404
ALLEN 81/02/20 14/09/08 402
WARD 81/02/22 14/09/08 402
JONES 81/04/02 14/09/08 401
MARTIN 81/09/28 14/09/08 395
SQL기초강좌_숫자 및 날짜함수
4. -- 현재일짜와 2010년1월1일과의 개월 차이(소수첫째 자리 반올림)
SQL> select sysdate, round(months_between(sysdate,'10/01/01')) from dual;
SYSDATE ROUND(MONTHS_BETWEEN(SYSDATE,'10/01/01'))
---------- -----------------------------------------
14/09/08 56
-- 다음 월요일을 출력(현재는 2014년9월8일 월요일)
SQL> select sysdate, next_day(sysdate,'월요일') from dual;
SYSDATE NEXT_DAY
---------- --------
14/09/08 14/09/15
SQL기초강좌_숫자 및 날짜함수
6. -- NEW_DATE함수는 오라클 9i 이후 사용가능, 한국시각은 GMT+9
SQL> SELECT TO_CHAR(sysdate,'HH24:MI:SS') as "한국시각",
2 TO_CHAR(sysdate-9/24,'HH24:MI:SS') as "그리니치표준시각",
3 TO_CHAR(NEW_TIME(TO_DATE(sysdate-9/24,'HH24:MI:SS'),
'GMT','EST'),'HH24:MI:SS') as "Eastern Time Zone",
4 TO_CHAR(NEW_TIME(TO_DATE(sysdate-9/24,'HH24:MI:SS'),
'GMT','BST'),'HH24:MI:SS') as "British Summer Time"
5 FROM DUAL;
한국시각 그리니치 Eastern British
-------- -------- -------- --------
12:38:50 03:38:50 09:09:08 03:09:08
SQL기초강좌_숫자 및 날짜함수
7. -- SYSDATE를 그냥 출력하면 날짜만 나오게 된다. 만약 시간도 확인을 하기 위해서는
to_char 와 같은 변환 함수를 이용하여 문자로 변환을 시켜 줘야 한다.
SQL> select sysdate, to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') from dual;
SYSDATE TO_CHAR(SYSDATE,'YY
---------- -------------------
14/09/08 2014.09.08 11:34:23
--MONTH는 월의 첫날을 출력하는데 8일 이므로 월은 반올림 되지 않고 9월1일이 출
력된다. 또한 DAY의 경우 주의 첫 요일을 출력하는데 9월8일 월요일 이므로 반올림 대
상이 아니다. 즉 주의 첫 일요일인 9월7일이 출력 되는 것이다.
SQL> select sysdate, round(sysdate, 'MONTH'), round(sysdate, 'DAY') from dual;
SYSDATE ROUND(SY ROUND(SY
---------- -------- --------
14/09/08 14/09/01 14/09/07
SQL기초강좌_숫자 및 날짜함수
8. --MONTH는 월의 첫날을 출력하는데 16일 이므로 월은 반올림 되어 10월1일이 출력
된다. 또한 DAY의 경우 주의 첫 요일을 출력하는데 9월11 목요일 이므로 반올림 대상
이다. 즉 주의 첫 일요일인 9월17일(일요일)이 출력 된다.
SQL> select sysdate, round(to_date('14/09/16'), 'MONTH'), round(to_date('14/09/11'), 'DAY')
from dual;
SYSDATE ROUND(TO ROUND(TO
---------- -------- --------
14/09/08 14/10/01 14/09/14
-- EMP 테이블에서 “SMITH” 사원의 오늘을 기준으로 입사한지 몇 개월째 인지 파악
하려고 한다.(16일 부터는 1개월로 반올림하는 예문이다.)
SQL> select ename, hiredate "입사일", sysdate "기준일",
2 round(months_between(sysdate, hiredate), 0) "입사개월수"
3 from emp
4 where ename = 'SMITH';
ENAME 입사일 기준일 입사개월수
-------------------- -------- -------- ----------
SMITH 80/12/17 14/09/08 405
SQL기초강좌_숫자 및 날짜함수
9. --아래는 trunc, round를 사용하는 예문이다. 9월30일은 화요일로써 DAY형태로는 반
올림 되지 않고 (수요일 정오가 지나야 반올림) 그 주 시작 일요일인 9월28일이 출력된
다.
SQL> select round(to_date('20140930'), 'MONTH'), round(to_date('20140930'),
'DAY'),
2 trunc(to_date('20140930'), 'MONTH'), trunc(to_date('20140930'), 'DAY')
3 from dual;
ROUND(TO ROUND(TO TRUNC(TO TRUNC(TO
-----------------------------------------------------------------
14/10/01 14/09/28 14/09/01 14/09/28
SQL기초강좌_숫자 및 날짜함수
10. --일단위로 보면 정오를 지났으므로 일자가 반올림 된다. DD포맷은 월에서 오늘이 며
칠인지 리턴하는데 정오를 기준으로 일자를 반올림 한다.
SQL> select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss'), round(sysdate,'DD') from
dual;
TO_CHAR(SYSDATE,'YY ROUND(SY
------------------- --------
2014.09.08 11:47:51 14/09/08
SQL> select sysdate, round(to_date('14/09/26'),'DD') from dual;
SYSDATE ROUND(TO
---------- --------
14/09/08 14/09/26
SQL기초강좌_숫자 및 날짜함수
11. SQL> select systimestamp from dual;
SYSTIMESTAMP
-----------------------------------
14/09/08 11:48:57.656000 +09:00
SQL> select sysdate +60 "오늘부터 60일 후" from dual;
오늘부터
--------
14/11/07
--아래 예문은 1970년 1월1일부터 오늘까지의 일수차이를 반환하는 예문이다.
SQL> select trunc(sysdate - to_date('19700101','yyyymmdd')) from dual;
TRUNC(SYSDATE-TO_DATE('19700101','YYYYMMDD'))
---------------------------------------------
16321
SQL기초강좌_숫자 및 날짜함수
[날짜 산술 연산]
date + number date
date – number date
date – date 정수
date + number/24 date