我正在修复一个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) <= '16' ELSE SUBSTR(A.ITDSC,13,2) >= '17' END
</if>
答案 0 :(得分:2)
使用<=
和>=
转义<=
和>=
看起来不错,对我有用。
但是where子句的那部分
AND
CASE
WHEN #{size} = '16' THEN SUBSTR(A.ITDSC,13,2) <= '16'
ELSE SUBSTR(A.ITDSC,13,2) >= '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'