MyBatis错误小于等于和大于等于符号

时间:2016-04-18 18:58:50

标签: sql mybatis

我正在修复一个sql查询,在case语句中包含一个小于等于且大于等于的where子句但是每当我尝试运行时,我都会得到相同的错误消息,说明< = token无效。我已经尝试过这些符号,因为html代码和CDATA括号中都包含了同样的错误。 mybatis队列在下面。

    WHERE A.WDATE BETWEEN  #{fdate} AND #{tdate}
    AND A.FAC LIKE #{fac}

    <if test = 'good != "%"'>
        AND SUBSTR(A.ITDSC,21,4) NOT LIKE  #{good}
    </if>
    <if test = 'size != ""'>
        AND CASE WHEN #{size} = '16' THEN SUBSTR(A.ITDSC,13,2) &lt;= '16'   ELSE SUBSTR(A.ITDSC,13,2) &gt;= '17' END
    </if>

3 个答案:

答案 0 :(得分:2)

使用<=>=转义&lt;=&gt;=看起来不错,对我有用。

但是where子句的那部分

AND 
  CASE 
     WHEN #{size} = '16' THEN SUBSTR(A.ITDSC,13,2) &lt;= '16'   
     ELSE SUBSTR(A.ITDSC,13,2) &gt;= '17' 
  END

看起来很可疑。

DB2中,CASE必须是表达式的一部分,例如

WHERE xyz >= CASE WHEN ... THEN ... END

 WHERE
     (CASE WHEN ... THEN ... ELSE ... END) >= xyz

有关详细信息和示例,请参阅case-expressions

答案 1 :(得分:1)

试试这个,也许可以工作;)

\> fun $ [1,2,3,4,3] ++ [1..]
[1,2,3,4]

答案 2 :(得分:0)

我能够通过使用两个IF语句来解决问题,第一个用于size =='16'而另一个用于size =='17'