簡體   English   中英

sql日期與db2jcc的減法

[英]sql date days substraction with db2jcc

我有一個SQL,試圖從日期值中減去天。 該SQL語句也必須在Oracle和DB2數據庫中運行,我從Java中使用db2jcc 10.5.0.1對其進行了調用。 該調用引發了此異常:

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中不可用。 我以其他方式解決了問題,但我仍然對答案感興趣。

您需要在日期計算中使用間隔單位名稱。

范例

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基礎:日期和時間的樂趣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM