SQL> column sysdate format a10 SQL> column systimestamp format a35 SQL> select sysdate, systimestamp from dual; ---------- ----------------------------------- 14/09/08 14/09/08 11:22:50.593000 +09:00 -- 현재 세션의 NLS_DATE_FORMAT을 확인 SQL> select * from nls_session_parameters where parameter = 'NLS_DATE_FORMAT'; ------------------------------------------------------------ SQL> select current_date from dual; SQL> select sessiontimezone from dual; --------------------------------------------- SQL> alter session set nls_date_format='yyyy.mm.dd hh24:mi:ss'; SQL> select current_date from dual; SQL> SELECT EXTRACT(YEAR FROM DATE '2014-01-01'), 2 EXTRACT(MONTH FROM DATE '2014-01-01') EXTRACT(YEARFROMDATE'2014-01-01') EXTRACT(MONTHFROMDATE'2014-01-01') --------------------------------- ---------------------------------- ---- EMP 테이블에서 입사년도가 1981년보다 큰 사원의 사번, 이름 추출 SQL> select empno, ename from emp 2 where extract(year from hiredate) > 1981 SQL> select sysdate+100 from dual; -- 현재월의 마지막 날을 반환 하는 예문 이다. SQL> select last_day(sysdate) from dual; -- 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 -- 현재일짜와 2010년1월1일과의 개월 차이(소수첫째 자리 반올림) SQL> select sysdate, round(months_between(sysdate,'10/01/01')) from dual; SYSDATE ROUND(MONTHS_BETWEEN(SYSDATE,'10/01/01')) ---------- ----------------------------------------- -- 다음 월요일을 출력(현재는 2014년9월8일 월요일) SQL> select sysdate, next_day(sysdate,'월요일') from dual; SQL> select sysdate, next_day(sysdate,'월') from dual; SQL> select sysdate, next_day(sysdate,'화') from dual; -- 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" 한국시각 그리니치 Eastern British -------- -------- -------- -------- 12:38:50 03:38:50 09:09:08 03:09:08 -- 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 --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) "입사개월수" -------------------- -------- -------- ---------- SMITH 80/12/17 14/09/08 405 --아래는 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') ROUND(TO ROUND(TO TRUNC(TO TRUNC(TO ----------------------------------------------------------------- 14/10/01 14/09/28 14/09/01 14/09/28 --일단위로 보면 정오를 지났으므로 일자가 반올림 된다. 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; |
댓글 없음:
댓글 쓰기