초보 질문 있습니다. sql문입니다. 0 3 1,821

by rkaalstu [SQL Query] sql TO_CHAR TO_DATE [2019.08.13 14:15:42]



1. WHERE STARTEDDATE between to_date(#{FirstDate},'YYYY/MM/DD') AND to_date(#{LastDate},'YYYY/MM/DD')


2. WHERE TO_CHAR(STARTEDDATE,'YYYY/MM/DD') between #{FirstDate} AND #{LastDate}

이거 2개 차이가 혹시 많나요??

1번으로 햇더니 오늘 데이터를 생성하니깐 조회가 안되고 2번으로 하니깐 조회가 되서요... 혹시 다른점이잇나요..

 

by 꼬랑지 [2019.08.13 14:42:41]

FirstDate 와 LastDate 가 오늘로 동일 날짜라면 시분초 문제로 조회 안되겠죠. 00시 00분 00초 로 조회한 거니까요


by jkson [2019.08.13 14:45:21]

2번은 인덱스 컬럼일 경우 컬럼 가공으로 인덱스 활용을 못 하게 됩니다.

WHERE STARTEDDATE between to_date(#{FirstDate},'YYYY/MM/DD') AND to_date(#{LastDate},'YYYY/MM/DD') + 0.99999

OR

WHERE STARTEDDATE >= to_date(#{FirstDate},'YYYY/MM/DD') AND STARTEDDATE < to_date(#{LastDate},'YYYY/MM/DD') + 1


by 마농 [2019.08.16 07:45:19]

1. 차이점
 - 시분초까지 비교하는지?
 - 일자까지만 비교하는지?
2. 조건 개선
 - 컬럼을 가공하여 비교하는 것 보다는
 - 컬럼은 그대로 둔 채 조건값을 가공하여 비교하셔야 좋습니다.
3. 기타 고려사항
 - 혹시 Starteddate 가 있다면? Endeddate 도 있는게 아닐런지?
 - 만약 있다면? 단순 날짜 검색이 아닌 기간 검색이 되어야 합니다.
 - 기간 검색은 시작일과 종료일을 교차하여 비교
 - WHERE Starteddate < TO_DATE(#{LastDate}, 'yyyy/mm/dd') + 1
 - AND Endeddate >= TO_DATE(#{FirstDate}, 'yyyy/mm/dd')

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입