我有以下sql查询:
SELECT COUNT(*) FROM PC_DATA
WHERE PC_DATE BETWEEN ? AND (? + 4 MONTHS)
AND UPPER(PC_TYPE) LIKE UPPER(?)
现在我尝试通过 JAVA 中的以下代码设置Dates
的值:
Date start = new Date(quaterStart.getTimeInMillis());
stmt.setDate(1, start);
stmt.setDate(2, start);
stmt.setString(3, "%" + type + "%");
当我运行它时,我得到以下异常:DB2 SQL Error: SQLCODE=-182, SQLSTATE=42816, SQLERRMC=null, DRIVER=4.16.53
当我尝试以下列方式从控制台运行此SQL查询时,它运行时没有任何问题:
SELECT COUNT(*) FROM PC_DATA
WHERE PC_DATE BETWEEN DATE('2015-01-01') AND (DATE('2015-01-01') + 4 MONTHS)
AND UPPER(PC_TYPE) LIKE UPPER('%laptop%');
我做错了什么?谢谢。
答案 0 :(得分:1)
日期时间算术表达式是原子的,即<date> + 4 months
是一个完整的表达式,因此您不能用变量(参数)替换它的一部分。您必须在Java代码中计算上边界日期,并将查询文本更改为...WHERE PC_DATE BETWEEN ? AND ?
。