header-img
Info :
  1. 잘못된 코드
  2. 해결방법 1. CDATA
  3. 해결방법 2. gt, lt
  4. when 이나 if절의 test에서 부등호를 사용하고 싶다면
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 &lt; (CONVERT(DATE, #{Year}+'-12-31'))
	)
	SELECT * FROM CTE OPTION ( MAXRECURSION 0 );
</update>

 

기호 대체식 예제
< lt workDate &lt; '2024-01-01'
> gt workDate &gt; '2024-01-01'

 

when 이나 if절의 test에서 부등호를 사용하고 싶다면

 

대체식을 사용하여 표기해주면 된다.

 

<if test = ' workDt > 2024-01-01 ' > 의 경우는 <if test = 'workDt lt 2024-01-01' > 의 형식으로 사용하면 됨.

 

 

 

728x90
더보기
BACKEND