안녕하세요 쿼리짜다가 궁금한게 있어서 글 써보아요...
특정날짜 사이의 데이터를 검색하고 싶습니다.
예를들어 20170101부터 20170110 사이의 날짜를 검색하고싶을때
1) aa between '20170101' and '20170111' 이렇게 쓰거나
2) aa >='20170101' and aa<'20170111'
둘중 어느방식이 더 효율적인가요??
a>=to_date('20170101','yyyymmdd') and a<to_date('20170110','yyyymmdd')+1; 이렇게 쓰는건 2번방식과 의마가 동일한 건가요??
아니면 또 다른방법이 있을까요?
*참고로 aa 칼럼은 date 타입입니다.
감사합니다.^^
1. 1)번은 기간이 틀렸구요.
- 2017-01-11 00:00:00 데이터가 포함 될 소지가 있음.
- 효율을 따지기 전에 정확한지부터 따져야 합니다.(효율은 어차피 둘다 범위 검색이므로 차이 없음)
2. 1)번, 2)번 은 비교 타입이 틀리네요.
- 이 경우 사용 환경에 따라 에러 날 수도 있고 안 날 수도 있네요.
- 결론은 틀린 사용법이라고 보시면 됩니다.
- 비교 되는 좌,우변 항목의 타입을 맞춰줘야 합니다.
- 될 수 있으면 컬럼은 그대로 두고 조건을 가공하는게 좋습니다.
3. to_date 사용방법이 정확한 사용법입니다.
- AND a >= TO_DATE('20170101', 'yyyymmdd')
- AND a < TO_DATE('20170110', 'yyyymmdd') + 1
4 TO_DATE('20170110', 'yyyymmdd') + 0.99999 하면
- 이퀄이 포함된 <= 조건이나 between 조건이 사용 가능합니다.
- AND a >= TO_DATE('20170101', 'yyyymmdd')
- AND a <= TO_DATE('20170110', 'yyyymmdd') + 0.99999