【问题标题】:BIRT Date Parameters for Informix QueriesInformix 查询的 BIRT 日期参数
【发布时间】:2014-10-27 18:42:28
【问题描述】:

我在尝试在针对 Informix (11.50) 数据库的查询中使用 Date 参数时遇到了语法错误。我正在使用这个查询:

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

查询参数类型设置为日期,报表参数设置为日期时间,格式为短日期。

我得到的错误是:java.sql.SQLException: Non-numeric character in datetime or interval。

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

据我所知,这是 Informix 日期时间文字的正确格式。我开始失去我的想法......

编辑:

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

Michał 的回答为我指明了正确的方向。在 BIRT 的查询中将文字缩减为 YYYY-MM-DD 效果很好。

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

【问题讨论】:

    标签: birt informix


    【解决方案1】:

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

    我的快速 Jython 脚本显示,使用 datetime (YEAR TO SECOND),您可以使用以下内容:

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

    使用date(今年至今),您可以使用以下内容:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 2023-03-13
      • 1970-01-01
      • 2014-06-21
      相关资源
      最近更新 更多