SQL

[SQL] "BETWEEN 날짜 AND 날짜" 경계값 조회 안 되는 경우 (MyBatis)

15호의 개발자 2022. 8. 10. 09:00
반응형

[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일 데이터도 나오면서

 

원하는 검색이 잘 되는 것을 확인했다.

 

 

 

 

 

반응형