如何在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
答案 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中的手册。