너무 간단한 실수이지만 나처럼 잘 모르는 사람은 고생할 것 같아 글을 적어본다.

셋팅은 mybatis을 통한 mysql 연결상태이다. xml 을 이용하여 sql 쿼리문을 json 형태로 보내는 형태이다.

오류는 이렇다.

오류가 발생한 쿼리는 이렇다.

 

<select id="selectpick" parameterType="JSON" resultType="JSON">
SELECT
date_format(LEFT(CAST(REQDT AS UNSIGNED),8),'%Y-%m-%d') AS REQDT,
count(SVCE_DOMAIN) COUNTSVCE,
SVCE_DOMAIN,
REQID,
REQIP
FROM BC_HISTORY
group by date_format(LEFT(CAST(REQDT AS UNSIGNED),8),'%Y-%m-%d')

<where>
<if test="msgid!=null">
AND MSGID = #{msgid}
</if>

<choose>
<when test="log_yyyymmdd_from) and (log_yyyymmdd_to !=null">
<![CDATA[
AND LEFT(CAST(REQDT AS UNSIGNED),8) BETWEEN #{log_yyyymmdd_from} AND #{log_yyyymmdd_to}
]]>
</when>

</when>
</choose>
</where>

 

여기서 난 오류는 

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE  LEFT(CAST(REQDT AS UNSIGNED),8) BETWEEN 20201211 AND 20201217 

 

인데 datepicker로 날짜 data를 입력하면 when 절에서 이를 처리하게끔 하고 싶었다. 그러나 date를 입력하면 위와 같은 오류가 생기는데 간단히 해석하자면 sql절이 잘못 작성되었다는 뜻이다.

 

처음에 이유를 몰라서 해당 절이랑 관련된 쿼리문만 보고 있었는데, 마침내 그 이유를 알아냈다. 바로 group by 절의 위치가 잘못 쓰인 것이다. 

select

*from

where

group by 이 순으로 써야한다는 것은 잘 알 고 있었지만 xml에서 쓸려다보니 이를 망각하고 where절 위에 써버린 것이다.

 

(<where></where> 태그가 where절이다.)

select

*from

<where></where>

group by 

이런 순서로 작성했어야 했다 ㅠㅠ 이걸 모르고 몇시간동안 쓸데없는걸 건드렸다 ㅠㅠ 혹시나 나같이 고생하는 사람이 있을까 적어본다 ㅠㅠ

+ Recent posts