빅데이터/SQL
날짜 연산(INTERVAL type etc)
예캉
2017. 12. 29. 13:58
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | -- 날짜 연산 ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR HH:MI:SS [AM]'; SELECT SYSDATE - DATE '2001-04-13' FROM dual; SELECT SYSDATE,SYSDATE+1 FROM dual; SELECT SYSDATE,SYSDATE+6 FROM dual; SELECT SYSDATE, SYSDATE - 30/(24*60) FROM dual; -- 분 SELECT SYSDATE, SYSDATE + 2/24 + 11/24/60 + 22/24/60/60 FROM dual; -- INTERVAL type -- 1) YEAR TO MONTH -- 2) DAY TO SECOND SELECT INTERVAL '2-03' YEAR TO MONTH , INTERVAL '1 2:3:4' DAY TO SECOND FROM dual; ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS'; SELECT SYSDATE , SYSDATE + INTERVAL '2-03' YEAR TO MONTH , SYSDATE + INTERVAL '1 2:3:4' DAY TO SECOND FROM dual; -- 현재 시간에서 2시간 11분 22초 후를 INTERVAL로 구하면? SELECT SYSDATE , SYSDATE + INTERVAL '0 2:11:22' DAY TO SECOND FROM dual; SELECT SYSDATE , SYSDATE + INTERVAL '2:11:22' HOUR TO SECOND FROM dual; -- 현재 시간에서 이틀 전은? SELECT SYSDATE , SYSDATE - INTERVAL '2' DAY FROM dual; SELECT SYSDATE , SYSDATE + INTERVAL '1:2' HOUR TO MINUTE , SYSDATE + INTERVAL '-1:2' MINUTE TO SECOND , SYSDATE + INTERVAL '1:2' MINUTE TO SECOND FROM dual; SELECT SYSDATE , SYSDATE + INTERVAL '1' YEAR , SYSDATE + INTERVAL '1' MONTH FROM dual; -- YEAR, DAY의 크기!!!!!!!!!!!!! -- 기본값은 둘 다 2자리!!!!!!!!!!!!!!!!! SELECT INTERVAL '100' YEAR FROM daul; -- 오류가 난다. SELECT INTERVAL '100' YEAR(3) FROM dual; SELECT INTERVAL '100' DAY FROM dual; -- 오류가 난다. SELECT INTERVAL '100' DAY(3) FROM dual; SELECT INTERVAL '100 3' DAY(3) TO HOUR FROM dual; SELECT INTERVAL '100' MONTH FROM dual; SELECT INTERVAL '1-12' YEAR TO MONTH FROM dual; -- 에러가 난다. 1년 ~개월할때 ~는 11까지만 가능하다. --마찬가지로 하루 25시간도 안된다. SELECT INTERVAL '2-0' YEAR TO MONTH FROM dual; SELECT INTERVAL '2' YEAR FROM dual; -- 1998년 3월에 입사한 사원들의 이름과 입사일을 출력하세요 ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR'; ALTER SESSION SET NLS_LANGUAGE = 'american'; -- 내 코드 SELECT last_name, hire_date, LAST_DAY(HIRE_DATE) FROM employees WHERE LAST_DAY(HIRE_DATE)='31-MAR-98'; -- 강사님 코드 1 SELECT last_name, hire_date FROM employees WHERE hire_date BETWEEN '01-march-98' AND '31-MAR-1998'; -- 강사님 코드 2 SELECT last_name, hire_date FROM employees WHERE hire_date >= '01-march-98' AND hire_date < '01-APR-1998'; -- 강사님 코드 3 SELECT last_name, hire_date FROM employees WHERE hire_date BETWEEN '01-march-98' AND LAST_DAY('01-MAR-98'); -- next day SELECT NEXT_DAY(DATE '2001-04-13','SAT') FROM dual; -- 문제) last_name 의 길이가 5인 사원의 이름과 직무, 급여를 출력하세요. SELECT last_name, job_id, salary, LENGTH(last_name) FROM employees WHERE LENGTH(last_name)=5; -- like -- last_name LIKE '_____'; | cs |
<날짜 조작 함수>
MONTH_BETWEEN : 두 날짜 간의 월 수
ADD_MONTHS : 날짜에 월 추가
NEXT_DAY : 지정된 날짜의 다음 날
LAST_DAY : 월의 마지막 날
ROUND : 날짜 반올림
TRUNC : 날짜 truncate