2011-01-23 95 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