728x90
쿼리문을 작성하다보면 비교문을 사용하는 경우가 생기는데..
마이바티스에서는 <,>,<= 등과 같은 부등호를 사용하면 오류가 발생한다...
마이바티스에서는 비교연산자를 사용할 경우
비교 연산자인지 괄호인지 구분을 못해서 Error 가 떨어진다고 함.
뭔가 다른 쓰는 방법이 있는 듯 하다.
그 "다른 쓰는 방법"에 대해 알아보자.
우선 내가 작성한
잘못된 코드
<update id="siteCalendarCreate" parameterType="HashMap">
WITH CTE(WorkDate) AS (
SELECT CONVERT ( DATE, #{Year}+'-01-01')
UNION ALL
SELECT DATEADD(d, 1, WorkDate)
FROM CTE
WHERE WorkDate < (CONVERT(DATE, #{Year}+'-12-31'))
)
SELECT * FROM CTE OPTION ( MAXRECURSION 0 );
</update>
해결방법 1. CDATA
CDATA 로 해결하는 방법은 두가지이다.
하나. <![CDATA["부등호"]]>
<update id="siteCalendarCreate" parameterType="HashMap">
WITH CTE(WorkDate) AS (
SELECT CONVERT ( DATE, #{Year}+'-01-01')
UNION ALL
SELECT DATEADD(d, 1, WorkDate)
FROM CTE
WHERE WorkDate <![CDATA["<"]]> (CONVERT(DATE, #{Year}+'-12-31'))
)
SELECT * FROM CTE OPTION ( MAXRECURSION 0 );
</update>
둘. <![CDATA[잘못된 쿼리문]]>
<update id="siteCalendarCreate" parameterType="HashMap">
WITH CTE(WorkDate) AS (
SELECT CONVERT ( DATE, #{Year}+'-01-01')
UNION ALL
SELECT DATEADD(d, 1, WorkDate)
FROM CTE
WHERE <![CDATA[WorkDate < (CONVERT(DATE, #{Year}+'-12-31'))]]>
)
SELECT * FROM CTE OPTION ( MAXRECURSION 0 );
</update>
해결방법 2. gt, lt
대체식을 이용하여 문법에 맞춰주는 방법이다.
<update id="siteCalendarCreate" parameterType="HashMap">
WITH CTE(WorkDate) AS (
SELECT CONVERT ( DATE, #{Year}+'-01-01')
UNION ALL
SELECT DATEADD(d, 1, WorkDate)
FROM CTE
WHERE WorkDate < (CONVERT(DATE, #{Year}+'-12-31'))
)
SELECT * FROM CTE OPTION ( MAXRECURSION 0 );
</update>
기호 | 대체식 | 예제 |
< | lt | workDate < '2024-01-01' |
> | gt | workDate > '2024-01-01' |
when 이나 if절의 test에서 부등호를 사용하고 싶다면
대체식을 사용하여 표기해주면 된다.
<if test = ' workDt > 2024-01-01 ' > 의 경우는 <if test = 'workDt lt 2024-01-01' > 의 형식으로 사용하면 됨.
728x90