在 sql 之后使用带有算术计算的 PreparedStatement 时,具有 DATETIME 值的算术表达式无效
An arithmetic expression with a DATETIME value is invalid while using PreparedStatement with Arithmetic calculation in sql later
我有以下 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%');
我做错了什么?谢谢。
日期时间算术表达式是原子的,即<date> + 4 months
是一个完整的表达式,不能只用变量(参数)替换其中的一部分。您必须在 Java 代码中计算上限日期并将查询文本更改为 ...WHERE PC_DATE BETWEEN ? AND ?
.
另见 。
我有以下 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%');
我做错了什么?谢谢。
日期时间算术表达式是原子的,即<date> + 4 months
是一个完整的表达式,不能只用变量(参数)替换其中的一部分。您必须在 Java 代码中计算上限日期并将查询文本更改为 ...WHERE PC_DATE BETWEEN ? AND ?
.
另见