반응형
[SQL] "BETWEEN 날짜 AND 날짜" 경계값 조회 안 되는 경우 (MyBatis)
<문제 상황>
Mybatis로 if문을 걸어서 sql 조회시
BETWEEN 조건으로 날짜 검색을 하는 경우 경곗값이 검색되지 않았다.
<if test='startDate != null and startDate != "" and endDdate != null and endDdate != ""'>
AND date BETWEEN #{startDate} AND #{endDdate}
</if>
startDate에 2022년 1월 1일을 넣고, endDate에 2022년 1월 31일을 넣는 경우
1월 1일 데이터와, 1월 31일 데이터는 검색되지 않았다.
2022년 1월 1일부터 2022년 1월 1일까지 검색하는 경우라면
1월 1일 데이터가 나오길 기대했지만 아무 것도 검색되지 않았다.
<해결 방법>
<if test='startDate != null and startDate != "" and endDdate != null and endDdate != ""'>
AND date BETWEEN TO_DATE(#{startDate}) AND TO_DATE(#{endDdate})
</if>
이는 엔티티 속성에서 startDate와 endDate가 String 타입으로 선언되어있을 확률이 높다.
나의 경우도 그랬고, 위와 같이 TO_DATE를 통해 Date 타입으로 캐스팅해주니까
BETWEEN 경계값들도 검색이 잘 되었다.
TO_DATE로 타입 캐스팅한 후에는
2022년 1월 1일부터 2022년 1월 1일까지 검색시 1월 1일 데이터도 나오면서
원하는 검색이 잘 되는 것을 확인했다.
반응형