在DB2中找到时差

时间:2010-07-05 07:48:25

标签: sql db2 timestamp

如何在DB2中编写查询以执行以下操作:

当前时间戳与时间戳字段之间的差异(以dB为单位)应>> = 4小时且< = 24小时

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

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

3 个答案:

答案 0 :(得分:3)

select * 
from   table t
where  t.tscolumn between current timestamp - 24 hours 
                      and current timestamp - 4 hours

答案 1 :(得分:0)

仅使用Hour代替[hour]

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

答案 2 :(得分:0)

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 Info Center中的手册。