본문 바로가기

DATABASE

[ORACLE] 날짜 형식 예제

SELECT TO_CHAR(SYSDATE-1, 'YYYY-MM-DD') FROM Dual

SELECT TO_CHAR(TO_DATE('2002-05-10', 'YYYY-MM-DD')-1, 'YYYY-MM-DD') FROM Dual

SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY-MM') FROM Dual

SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2002-05-10', 'YYYY-MM-DD'), -1), 'YYYY-MM') FROM Dual

SELECT TO_CHAR(TO_DATE('2003-06-03'), 'D') FROM Dual

SELECT TO_NUMBER(TO_DATE('2003-05-10')-TO_DATE('2003-05-01')) FROM Dual

SELECT A.End_NO, A.Work_User, B.Username, A.Remark,
TO_CHAR((TO_DATE(A.STime, 'YYYY-MM-DD HH24:MI:SS')), 'YYYY-MM-DD HH24:MI:SS') || ' ~ ' ||
TO_CHAR((TO_DATE(A.ETime, 'YYYY-MM-DD HH24:MI:SS')), 'YYYY-MM-DD HH24:MI:SS') AS End_Time
FROM End_Busi_Mst A, SM_User B
WHERE A.Userid = B.Userid

/* 특정일 까지의 간격을 년, 개월, 일로 표현하기 */
SELECT TRUNC((MONTHS_BETWEEN(SYSDATE, TO_DATE('19780124', 'YYYYMMDD')) / 12)) "년",
TRUNC((MONTHS_BETWEEN(SYSDATE, TO_DATE('19780124', 'YYYYMMDD')) - TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19780124', 'YYYYMMDD')) / 12) * 12)) "개월",
TRUNC((MONTHS_BETWEEN(SYSDATE, TO_DATE('19780124', 'YYYYMMDD')) - TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19780124', 'YYYYMMDD')))) * 30.5) "일"
FROM DUAL
;

-----------------------------------------------------------------------

/* '금일' - '생일' / 개월 -> 태어난지 몇 개월이 흘렀는가? */
SELECT MONTHS_BETWEEN(SYSDATE,TO_DATE('1978-01-24','YYYY-MM-DD')) FROM DUAL;

/* 금일로부터 4개월 후 */
SELECT ADD_MONTHS(SYSDATE,4) FROM DUAL;

/* 금일 이후 최초의 목요일 (NLS_LANG이 KOREAN_KOREA.KO16KSC5601로 되어 있으면 한글로 요일 표현) */
SELECT NEXT_DAY(SYSDATE, '목요일') FROM DUAL;

/* 이달의 마지막 날짜 */
SELECT LAST_DAY(SYSDATE) FROM DUAL;

/* '금일' 반올림(오후면 다음날..) */
SELECT ROUND(SYSDATE,'DD') FROM DUAL;

/* '금일' 주 첫일 찾기 */
SELECT TRUNC(SYSDATE,'WW') FROM DUAL;


-- 날짜계산
/* 어제 */

DateColumn BETWEEN TRUNC(SYSDATE-1)AND TRUNC(SYSDATE-1) + 0.99999421;
/* 오늘 */

DateColumn BETWEEN TRUNC(SYSDATE)AND TRUNC(SYSDATE) + 0.99999421;
/* 내일 */

DateColumn BETWEEN TRUNC(SYSDATE+1)AND TRUNC(SYSDATE+1) + 0.99999421;
/* 금주 */

DateColumn BETWEEN TRUNC(SYSDATE+1) - TO_CHAR(SYSDATE,'D')AND TRUNC(SYSDATE+1) - TO_CHAR(SYSDATE,'D') + 6.99999421;
/* 차주 */

DateColumn BETWEEN TRUNC(SYSDATE+8) - TO_CHAR(SYSDATE,'D')AND TRUNC(TRUNC(SYSDATE) + 14.99999421) - TO_CHAR(SYSDATE,'D');
/* 금월 */

DateColumn BETWEEN TRUNC(SYSDATE+1) - TO_CHAR(SYSDATE,'DD')AND TRUNC(LAST_DAY(SYSDATE))+0.99999421;
/* 전월 */

DateColumn BETWEEN TRUNC(ADD_MONTHS(SYSDATE,-1)+1) - TO_CHAR(SYSDATE,'DD') AND TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE, -1)))+0.99999421;
/* 차월 */

DateColumn BETWEEN ADD_MONTHS(TRUNC(SYSDATE),1)- TO_CHAR(SYSDATE,'DD') + 1 AND LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),1)+0.99999421);

-------------------------

날짜비교구문(진행전,진행중,진행완료)_CASE,WHEN사용

------------------------

select dtstart,dtend,
(CASE
WHEN to_date(to_char(dtstart,'YYYY-MM-DD'),'yyyy-mm-dd') > to_date(to_char(sysdate,'YYYY-MM-DD'),'yyyy-mm-dd')
then '진행전'
WHEN to_date(to_char(dtstart,'YYYY-MM-DD'),'yyyy-mm-dd') <= to_date(to_char(sysdate,'YYYY-MM-DD'),'yyyy-mm-dd')
and to_date(to_char(dtend,'YYYY-MM-DD'),'yyyy-mm-dd') >= to_date(to_char(sysdate,'YYYY-MM-DD'),'yyyy-mm-dd')
then '진행중'
WHEN to_date(to_char(dtend,'YYYY-MM-DD'),'yyyy-mm-dd') < to_date(to_char(sysdate,'YYYY-MM-DD'),'yyyy-mm-dd')
then '진행완료'
else
'error'
end) t
from polltbl

-----------------------------------------------------------------------

날짜 형식이 시분초까지 표현하고 있는가 보군요.

where tdate > to_date('20050101', 'yyyymmdd')

and tdate < to_date('20051231','yyyymmdd') + 1

만약에 날짜 형식이 20050101000000 이렇게 들어가 있다면

where tdate between to_date('20050101000000', 'yyyymmddhh24miss')

and to_date('20051231000000', 'yyyymmddhh24miss')

위처럼 할 수 있겠죠.

upate는 아래처럼 하시면 됩니다.

update tab1

set date_col1 = date_col1 - 1/24/60/60

date_col - 1 이러면 1일 전이 됩니다.

date_col - 1/24 이러면 1시간 전이 됩니다.

date_col - 1/24/60 이러면 1분 전이 됩니다.

date_col - 1/24/60/60 이러면 1초 전이 됩니다