我有一个SQL,它试图从日期值中减去天数。这个SQL也必须在Oracle和DB2数据库中工作,我用db2jcc 10.5.0.1从db2jcc调用它。这个电话抛出了这个异常:
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中是不可用的。我用另一种方式解决了这个问题,但我仍然对答案感兴趣。
发布于 2013-12-09 09:26:34
您需要在日期计算中使用间隔单元名称。
示例:
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指:http://www.ibm.com/developerworks/data/library/techarticle/0211yip/0211yip3.html
https://stackoverflow.com/questions/20466316
复制相似问题