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초 전이 됩니다
'DATABASE' 카테고리의 다른 글
[oracle] LOCK 문제 확인과 해결 방법 (0) | 2011.10.16 |
---|---|
[mysql] 최대 성능 향상 방법 (0) | 2011.10.16 |
[mysql] 초보도 알아야 할 튜닝 18 가지 (0) | 2011.10.16 |
[mysql] 모니터링과 서버 튜닝 (0) | 2011.10.16 |
[mysql] 응용프로그램에서의 최적화 (0) | 2011.10.16 |