【问题标题】:Using sql DATEADD function in java在java中使用sql DATEADD函数
【发布时间】:2012-08-21 17:10:44
【问题描述】:

当我使用 DATEADD 运行查询时,数据库似乎无法识别此函数。 当我刚刚运行select DATEADD(Month, -3, GETDATE()) 时,我得到了:

Error code -1, SQL state 42X01: Syntax error: Encountered "<EOF>" at line 1, column 36.

如您所见,我从 hsqldb-2.2.9 添加了 JAR 文件

我在这里错过了什么?

【问题讨论】:

  • 什么是返回GETDATE()函数
  • 您使用的是 Derby 还是 HSQLDB?您已经包含了这两个数据库,答案取决于您使用的实际 DBMS。
  • 那么为什么还要包含 HSQLDB?
  • @a_horse_with_no_name - 我的错。谢谢。

标签: sql derby date-arithmetic dateadd


【解决方案1】:

在德比中加减一天 选择运行日期,{fn TIMESTAMPADD(SQL_TSI_DAY, -1, RUNDATE)} from tst.YOUTH

【讨论】:

    【解决方案2】:

    对于 hsqldb:

    添加日期 ( , , ) DATEADD ('月', 3, DATE '2008-11-22')

    试试看

    选择 DATEADD(Month, -3, '2008-11-22')

    德比:

    Derby 支持 JDBC 转义函数 TIMESTAMPADD

    TIMESTAMPDIFF(间隔,timestampExpression1,timestampExpression2)

    值 {fn timestampadd(SQL_TSI_DAY, 1, timestamp('2010-12-31 23:59:59'))};

    【讨论】:

    • Derby 没有 DateAdd 函数
    • 但 Onca 还包括 Apache Derby。
    • 这个 SELECT 也失败了。那么我该如何在德比中做到这一点呢?
    • @Onca:看我的回答。如果您使用 Derby,请说明为什么要添加 HSQLDB 库
    【解决方案3】:

    Derby 没有 DATEADD 函数。你需要使用JDBC functiontimestampadd来实现这个:

    select {fn TIMESTAMPADD(SQL_TSI_MONTH, -3, CURRENT_TIMESTAMP)}
    from sysibm.sysdummy1
    

    使用 sysdummy1 的替代方法是 ANSI 标准 values 子句,它在 Derby 和 HSQLDB 中都有效:

    values ({fn TIMESTAMPADD(SQL_TSI_MONTH, -3, CURRENT_TIMESTAMP)})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 2014-11-20
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多