날짜를 연산 하는 함수를 알아보겠습니다
오라클은 더 많은 글들이 있으니 포스팅으로 여러 함수와 쿼리들을 확인해보세요
먼가 이상한것이 있거나 의문점이있으면 댓글 남겨주세요
읽어보고 답변 남겨 놓겠습니다
그럼 본론으로 들어가겠습니다
날짜 계산 (연산자)
SELECT
SYSDATE + 100, --현재날짜 +100일
SYSDATE - 100, --현재날짜 -100일
SYSTIMESTAMP + 100, --현재날짜 +100일
SYSTIMESTAMP - 100 --현재날짜 -100일
FROM DUAL
위와같이 + , - 연산자를 활용하여 간단한 날짜 계산이 가능합니다.
날짜 계산 (함수)
SELECT
ADD_MONTHS(SYSDATE,6), --현재시간 + 6개월 뒤
LAST_DAY(SYSDATE), --해당월 마지막 일자 계산
NEXT_DAY(SYSDATE,'일요일'), --다음 주 일요일 계산
MONTHS_BETWEEN(SYSDATE, SYSDATE-100) --DATE1과 DATE2의 개월 수 반환
FROM DUAL
ADD_MONTHS(date, integer)
- ADD_MONTHS함수는 매개변수 DATE에 매개변수 INTEGER만큼의 월을 더한 날짜를 리턴합니다.
LAST_DATE(date)
- LASTE_DAY함수는 현재 월의 마지막 일자를 리턴합니다.
NEXT_DAY(date, char)
- NEXT_DAY함수는 매개변수 date의 다음 주 char(요일)의 날짜를 리턴합니다.
MONTHS_BETWEEN(date1, date2)
- MONTHS_BETWEEN함수는 매개변수 date1과 date2 사이의 개월수를 리턴합니다.
다양한 날짜 계산 EXAMPLE
SELECT
TO_CHAR(SYSDATE ,'yyyy/mm/dd'), --오늘 날짜
TO_CHAR(SYSDATE + 1 ,'yyyy/mm/dd'), --내일 날짜
TO_CHAR(SYSDATE -1 ,'yyyy/mm/dd'), --어제 날짜
TO_CHAR(TRUNC(SYSDATE,'dd') ,'yyyy/mm/dd hh24:mi:ss'), -- 오늘 정각 날짜
TO_CHAR(TRUNC(SYSDATE,'dd') + 1,'yyyy/mm/dd hh24:mi:ss'), -- 내일 정각 날짜
TO_CHAR(SYSDATE + 1/24/60/60 ,'yyyy/mm/dd hh24:mi:ss'), -- 1초 뒤 시간
TO_CHAR(SYSDATE + 1/24/60 ,'yyyy/mm/dd hh24:mi:ss'), -- 1분 뒤 시간
TO_CHAR(SYSDATE + 1/24 ,'yyyy/mm/dd hh24:mi:ss'), -- 1일 뒤 시간
TO_CHAR(TRUNC(SYSDATE,'mm') ,'yyyy/mm/dd'), --이번 달 시작날짜
TO_CHAR(LAST_DAY(SYSDATE) ,'yyyy/mm/dd'), --이번 달 마지막 날
TO_CHAR(TRUNC(ADD_MONTHS(SYSDATE, + 1),'mm') ,'yyyy/mm/dd'), --다음 달 시작날짜
TO_CHAR(ADD_MONTHS(SYSDATE, 1) ,'yyyy/mm/dd hh24:mi:ss'), -- 다음달 오늘 날자
TO_CHAR(TRUNC(SYSDATE, 'yyyy') ,'yyyy/mm/dd'), --올해 시작 일
TO_CHAR(TRUNC(ADD_MONTHS(SYSDATE, -12), 'dd'),'yyyy/mm/dd'), --작년 현재 일
TO_DATE(TO_CHAR(SYSDATE, 'YYYYMMDD')) - TO_DATE('19930315'), -- 두 날짜 사이 일수 계산
MONTHS_BETWEEN(SYSDATE, '19930315'), -- 두 날짜 사이의 월수 계산
TRUNC(MONTHS_BETWEEN(SYSDATE, '19930315')/12,0) --두 날짜 사이의 년수 계산
FROM DUAL;
날짜 연산 초단위
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
* SYSDATE -1 -> 1일전
* SYSDATE -1 / (60*60*24) -> 1초전
* SYSDATE -2 / (60*60*24) -> 2초전
* SYSDATE -1 / (60*24) -> 1분전
* SYSDATE -2 / (60*24) -> 2분전
* SYSDATE -1 / (24) -> 1시간전
* SYSDATE -2 / (24) -> 2시간전
1초전도 나누기를 활용하여 계산이 가능합니다
한번 신청하고 후 1시간이 지나지 않았다면 다시 신청 못하게 하는 로직을 만들수 있겠죠?
데이터에서 날짜를 컨트롤하는 경우는 무척많아서 꼭알아두어야 합니다
TO_DATE에는 문자열이 오면 날짜로 인식이 가능하다고 생각하시고!
언제나 외우려고 하지말고 항상 찾아보면서 몸으로 익히실려는 노력이 더 중요합니다!!
절대로 스트레스는 노노!!
'IT_Web > Oracle' 카테고리의 다른 글
Oracle - 카티시안(Cartesian) 곱을 이용한 조인 - 고정된 양식 출력 (0) | 2020.05.28 |
---|---|
Oracle - 카테시안(Cartesian) 곱을 이용한 조인 – 관계가 없는 테이블간의 조인 (0) | 2020.05.28 |
Oracle - 선수금 월별 매출 처리 쿼리 - 카테시안곱, CASE 문을 이용한 조인 방법 (0) | 2020.05.26 |
Oracle - 카테시안(Cartesian) 곱을 이용한 조인 – 나열된 컬럼을 여러 레코드로 생성 case문 (0) | 2020.05.22 |
Oracle - 데이터 연결의 다양한 방법 (0) | 2020.05.22 |