2013-09-16 47 views
0

我們使用ojdbc14_10.1.0.2.jar與Java/J2EE應用程序(直接使用JDBC)和JDK5,但是當我們嘗試遷移到ojdbc5-11.2.0.3.jar時,我們遇到了與某些sql請求相關的問題(jdbc)不起作用了。OJDBC 14隱含日期轉換?

僞SQL請求是:

select * 
from quotas q 
where q.datdeb<='2013-09-05' and q.datfin>='2013-09-05' 
and q.datdeb is not null and q.datfin is not null order by ....; 

的NLS參數日期爲: DD/MM/RR

這是不符合的日期格式給作爲請求參數兼容。

當我們使用ojdbc14時,一切正常;顯然它在日期中做了一個含蓄的轉換。

有關信息,Oracle數據庫是11g第二版11.2.0.3.0 - 64位

最好的問候。

回答

0

我相信你只需要使用to_date函數和適當的日期掩碼來解決問題。

select * 
from quotas q 
where q.datdeb<=to_date('2013-09-05','yyyy-mm-dd') and q.datfin>=to_date('2013-09-05', 'yyyy-mm-dd') 
and q.datdeb is not null and q.datfin is not null order by ....; 
+0

是當然的,這是一個很好的解決方案,但我忘了提及的是,在Java/J2EE應用程序包含了很多與參數日期SQL請求,所以影響將是巨大的,有一個偉大的迴歸風險。由於應用程序在Apache Tomcat下運行,有沒有任何Tomcat參數在將它們發送到Oracle之前隱式轉換sql date參數? –

+0

quotas.datdeb,quotas.datfin的數據類型是什麼?另外,該參數是日期還是字符串? – Brian

+0

quotas.datdeb,quotas.datfin是數據庫中的日期,並且給出的參數也是日期(java.util.Date),所以在Java/J2EE應用程序中它們被轉換爲YYYY-MM-DD,但數據庫接受DD/MM/RR格式日期。所以當我們使用OJDBC14時,我們沒有問題(我猜OJDBC14隱含地轉換了sql參數日期),但是當我們遷移到OJDBC5時,我們開始遇到這個問題。 –