LOG 테이블에서 2018년09월18일 ~ 2018년09월19일까지 검색을 하고 싶은데
2018년09월19일 로그들이 검색 되지 않습니다. 18일 것만 나옵니다. 아래 2 쿼리 모두다 그렇습니다.
======================================================
테이블명: LOG
SENDDATE 컬럼: TYPE DATE
=========================
select * from LOG
where SENDDATE BETWEEN TO_DATE('2018-09-18', 'YYYY-MM-DD') AND TO_DATE('2018-09-19', 'YYYY-MM-DD');
select * from LOG
where SENDDATE BETWEEN TO_DATE(NVL('','2018-09-18'), 'yyyy-mm-dd') AND TO_DATE(NVL('','2018-09-19'), 'yyyy-mm-dd');
-- 일자 뿐만 아니라 시분초까지 고려해야 합니다. SELECT * FROM log WHERE senddate >= TO_DATE('2018-09-18', 'yyyy-mm-dd') AND senddate < TO_DATE('2018-09-19', 'yyyy-mm-dd') + 1 ; SELECT * FROM log WHERE senddate BETWEEN TO_DATE('2018-09-18', 'yyyy-mm-dd') AND TO_DATE('2018-09-19 23:59:59', 'yyyy-mm-dd hh24:mi:ss') ; SELECT * FROM log WHERE senddate BETWEEN TO_DATE('2018-09-18', 'yyyy-mm-dd') AND TO_DATE('2018-09-19', 'yyyy-mm-dd') + 0.99999 ;
그럼 하루치만 출력하거나, 1년치만 출력할때는
다음과 같이 하면 되나요?
하루치 출력:
SELECT * FROM log WHERE senddate >= TO_DATE('2018-09-19', 'yyyy-mm-dd')
AND senddate < TO_DATE('2018-09-19', 'yyyy-mm-dd') + 1
일년치 출력:
SELECT * FROM log WHERE senddate >= TO_DATE('2017-01-01', 'yyyy-mm-dd')
AND senddate < TO_DATE('2017-12-31', 'yyyy-mm-dd') + 1
1. 오라클 DATE TYPE 은 날짜와 시간이 결합된 형태입니다.
- TO_DATE('2018-09-19', 'yyyy-mm-dd') 은 2018-09-19 00:00:00 을 의미합니다.
- date type 은 7byte 로 저장됩니다.
2. DATE + NUMBER 는
- 숫자는 일수를 의미합니다.
- TO_DATE('2018-09-19', 'yyyy-mm-dd') + 0.5 = 2018-09-19 12:00:00
- TO_DATE('2018-09-19', 'yyyy-mm-dd') + 0.99999 = 2018-09-19 23:59:59
3. 기타 날짜 연산
- DATE + DATE = 오류
- DATE - DATE = 일수
- DATE + 7 = DATE(일주일뒤)
- DATE - 7 = DATE(일주일전)
- DATE - 1/24 = DATE(한시간전)
- DATE - 1/24/60 = DATE(1분전)
- DATE - 1/24/60/60 = DATE(1초전)