2014-10-27 33 views
0

我正遇到一段语法错误,试图在对Informix(11.50)数据库的查询中使用Date参数。我使用这个查询:BIRT Informix查询的日期参数

select 
    distinct SOMEVARIABLE 
from 
    SOMETABLE 
where SOMEDATETIME > datetime (?) year to minute 
and SOMEDATETIME < datetime (2014-10-30) year to day 

查询参数类型设置为日期,报告放慢参数被设置为DateTime,格式为短日期。

我得到的错误是:java.sql.SQLException:日期时间或间隔中的非数字字符。

如果我注释掉where子句,我可以让BIRT向我显示它在插入错误的值:2014-10-27 00:00

据我所知,这是Informix日期时间字面值的正确格式。我开始失去什么离开我这里想到的......

编辑:

它看起来像这可能是我缺乏经验与Informix和我的环境的组合。我正在用SQuirrel编写和测试我的查询,使用与BIRT相同的JDBC配置。在SQuirrel中,如果我不使用长日期时间文字格式datetime(YYYY-MM-DD),我会收到语法错误。

Michał的回答指出了我的正确方向。在BIRT中的查询中将字面缩减为仅仅YYYY-MM-DD工作得很好。

我猜这与SQuirrel如何设置它与数据库的会话有关,但足以报告它是邪恶的。

回答

0

我不认为你可以使用准备好的语句参数并将其转换为日期时间。

我快速的Jython scrips表明,随着datetime(YEAR TO SECOND),您可以使用类似:

pstm = db.prepareStatement("SELECT * FROM _d_test WHERE dt>?") 
pstm.setString(1, "2010-01-01 00:00:00") 

而且随着date(YEAR TO DAY),你可以使用类似:

pstm = db.prepareStatement("SELECT * FROM _d_test WHERE d>?") 
pstm.setString(1, "2010-01-01")