Informix查询的BIRT日期参数

时间:2014-10-27 18:42:28

标签: birt informix

我遇到了一系列语法错误,试图在针对Informix(11.50)数据库的查询中使用Date参数。我正在使用此查询:

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

查询参数类型设置为Date,报告参数设置为DateTime,格式化为短日期。

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

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

据我所知,这是Informix datetime文字的正确格式。我开始失去我的想法了......

修改

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

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

我猜这与SQuirrel如何设置它与数据库的会话有关,但足以使报告成为其中的罪恶。

1 个答案:

答案 0 :(得分:0)

我认为您不能使用预准备语句参数并将其投射到日期时间。

我的快速Jython潦草表明,使用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")