使用db2jcc进行sql date days减法

时间:2013-12-09 08:35:14

标签: java date db2

我有一个SQL,试图从日期值中减去天数。这个SQL也必须在Oracle和DB2数据库中工作,我用db2jcc 10.5.0.1从Java调用它。 这个电话引发了这个例外:

09:25:17 ERROR (out) com.ibm.db2.jcc.am.SqlException: [jcc][1083][10400][3.66.46] Illegal conversion: can not convert from "java.sql.Date" to "java.lang.Integer" ERRORCODE=-4474, SQLSTATE=null
09:25:17 ERROR (out)    at com.ibm.db2.jcc.am.dd.a(dd.java:725)
09:25:17 ERROR (out)    at com.ibm.db2.jcc.am.dd.a(dd.java:60)
09:25:17 ERROR (out)    at com.ibm.db2.jcc.am.dd.a(dd.java:94)
09:25:17 ERROR (out)    at com.ibm.db2.jcc.am.gc.a(gc.java:585)
09:25:17 ERROR (out)    at com.ibm.db2.jcc.am.gc.a(gc.java:1338)
09:25:17 ERROR (out)    at com.ibm.db2.jcc.am.gc.a(gc.java:1314)
09:25:17 ERROR (out)    at com.ibm.db2.jcc.am.po.a(po.java:2426)
09:25:17 ERROR (out)    at com.ibm.db2.jcc.am.po.Fc(po.java:5722)
09:25:17 ERROR (out)    at com.ibm.db2.jcc.am.po.b(po.java:4078)
09:25:17 ERROR (out)    at com.ibm.db2.jcc.am.po.b(po.java:4536)
09:25:17 ERROR (out)    at com.ibm.db2.jcc.am.po.gc(po.java:739)
09:25:17 ERROR (out)    at com.ibm.db2.jcc.am.po.executeQuery(po.java:708)

我使SQL和java代码更简单,但它仍然抛出异常:

PreparedStatement pstmnt = connection.prepareStatement("select ? - 1 from dual");<br>
pstmnt.setDate(1, new Date(2013, 12, 07));<br>
ResultSet rs = pstmnt.executeQuery();<br>

这对我来说很奇怪,因为这个SQL仍然可以工作:
SELECT TO_DATE('1979-01-01','YYYY-MM-DD') -1 FROM dual

这是一个常见的司机问题,还是我错过了什么?

修改

我在TO_CHAR中使用此日期,如下所示:
SELECT TO_CHAR((CURRENT_TIMESTAMP -1 DAYS),'YYYY') FROM DUAL;
这在Oracle中不可用。 我以另一种方式解决了这个问题,但我仍然对答案感兴趣。

1 个答案:

答案 0 :(得分:0)

您需要在日期计算中使用间隔单位名称。

示例

current date + 1 YEAR 
current date + 3 YEARS + 2 MONTHS + 15 DAYS 
current time + 5 HOURS - 3 MINUTES + 10 SECONDS

CURRENT TIMESTAMP - MICROSECOND (current timestamp) MICROSECONDS

请参阅 DB2 Basics: Fun with Dates and Times