2011-01-23 162 views
2

時,順便Java.Sql.Date作爲綁定變量(在我的查詢文本問號)在PreparedStatement到nzjdbc.jar,我越來越:傳遞java.sql.date Netezza公司的jdbc驅動

pg_atoi:error in「2010-02-01」:can not parse「-02-01」

是什麼給出的?我認爲,一個JDBC驅動程序的全部目的就是要解決此類問題:(

+0

我現在可以縮小範圍。該問題僅在SQL以這種形式重現: ``select * from baa where start_date <=? - 30`` 並且在刪除「 - 30」時不會重現。 我的猜測是:當你指定-30時,Netezza試圖將綁定變量解析爲日期以外的東西。 – ihadanny 2011-01-23 12:08:42

回答

2

好了,找到了答案,沒有涉及到JDBC。

當傳遞一個日期變量JDBC,它是所有翻譯它到一個符合Netezza dateStyle的文字字符串,例如'2011-11-06 00:00:00',它沒有用cast或to_date或任何東西包裝它

然而,當你從任何Netezza客戶端嘗試select '2011-11-06 00:00:00' - 30 ,你會得到一個pg-atoi分析錯誤,因爲Netezza試圖將該字符串解析爲一個數字,而不是作爲日期。

解決方案:select cast('2004-02-22 00:00:00.000' as date) - 30 as bla;

其全宇宙愛寶貝。

+0

它讓我感到困惑,Netezza jdbc驅動程序在將數據發送到數據庫之前將日期轉換爲字符串... – Farzad 2014-06-04 01:05:59