【问题标题】:finding time difference in DB2在 DB2 中查找时差
【发布时间】:2010-07-05 07:48:25
【问题描述】:

如何在 DB2 中为以下内容编写查询:

当前时间戳与以 dB 为单位的时间戳字段之间的差异应为 >=4 小时和

有人建议这样做,但它不起作用。

select * from tableName where 
                 date <=  DATEADD([hour], -4, CURRENT_TIME) and 
                 date date >=  DATEADD([hour], -24, CURRENT_TIME)

但它不起作用。它给出了以下错误。

SQL0104N  An unexpected token "[hour]" was found following "ortdate <=  
DATEADD(".  Expected tokens may include:  "<func_arg_list>".  SQLSTATE=42601

【问题讨论】:

标签: sql db2 timestamp


【解决方案1】:
select * 
from   table t
where  t.tscolumn between current timestamp - 24 hours 
                      and current timestamp - 4 hours

【讨论】:

    【解决方案2】:

    只使用Hour 而不是[hour]

    select * from tableName where 
                     date <=  DATEADD(Hour, -4, CURRENT_TIME) and 
                     date date >=  DATEADD(Hour, -24, CURRENT_TIME)
    

    【讨论】:

    • 我仍然收到以下错误:SQL0206N "HOUR" 在使用它的上下文中无效。 SQLSTATE=42703
    • 我现在使用这个查询 select * from DB2ADMIN.SR where reportdate = DATEADD(Hour, -24, CURRENT_TIME)
    • @ask:我很惊讶这个查询有效,据我所知,db2 中没有 DATEADD 函数。
    【解决方案3】:

    DB2 不喜欢名称周围的方括号 - 这是 MS SQL Server 的习惯。

    DB2 9.7 Info Centre 中对 DATEADD() 的唯一引用(哦,请原谅:中心 - 有一天,美国人将学会正确拼写)在 '以下所有表达式都在包 com.ibm 中。 alphablox.bloxbuilder.lib.expression',令人费解。我怀疑搜索是错误的 - 尽管转到 SQL 手册并找到其中列出的函数,但 DATEADD 明显不存在,所以也许不是。

    因此,您将不得不为 DB2 语法手动 bash。但是,如果任何事情都行得通,它可能涉及:

    DATEADD(HOUR, -4, CURRENT_TIME)
    

    而不是任何方括号。但是,更广泛的搜索(包括关于 DB2 和 Oracle 兼容性的 RedBook)并未将 DATEADD 显示为 DB2 支持的功能。所以,DATEADD 路由注定……有问题。

    由于 DB2(仍然)没有适当的(SQL 标准)INTERVAL 类型,因此您需要调查“持续时间”。有关说明,请参阅DevX - 但请注意站点“.qnsr.com”要设置的 cookie 数量。并阅读 DB2 信息中心的手册。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      相关资源
      最近更新 更多