【问题标题】:Compare date and time in SQL for DB2比较 DB2 的 SQL 中的日期和时间
【发布时间】:2019-07-22 14:27:20
【问题描述】:

我需要比较 2 个字段的日期和时间,看看它是否大于 24 小时,但是还有另一个字段的值小于比较日期的 24 小时。例如,

  • 创建日期 - 2019 年 7 月 18 日上午 11:15
  • 目标日期 - 2019 年 7 月 19 日上午 11:16

这里有24小时的间隔

  • 实际日期 - 2019 年 7 月 19 日上午 10:45

实际日期小于上述24小时的差距。因此,查询应返回实际日期小于创建日期和目标日期间隔 24 小时的此类记录。这里所有的字段都是 DB2 数据库中的 DATETIME 数据类型。

【问题讨论】:

  • 你试过TIMESTAMPDIFF函数吗?
  • @MarkBarinstein 是的,我尝试过类似 TIMESTAMPDIFF(8, CHAR(TIMESTAMP(targstartdate) - TIMESTAMP(createdate))) ='24' 但是我不确定如何将这个差距与实际日期。

标签: sql db2


【解决方案1】:

不清楚你真正想做什么。
Actual date is less than above said gap of 24 hours
日期如何与间隔(或持续时间)相提并论?
我们应该理解为:
Gap between actual and created is less than gap between target and created?
如果是这样,请尝试以下操作:

select *
from 
(
select create, target, actual
, timestampdiff(8, char(target - create)) gap_target
, timestampdiff(8, char(actual - create)) gap_actual
from table(values 
  (timestamp('2019-07-18-11.15.00'), timestamp('2019-07-19-11.16.00'), timestamp('2019-07-19-10.45.00'))
) t (create, target, actual)
) 
where 
gap_target >= 24 and gap_actual < 24
-- or some another expression like:
-- gap_actual < gap_target
;  

CREATE              TARGET              ACTUAL              GAP_TARGET GAP_ACTUAL
------------------- ------------------- ------------------- ---------- ----------
2019-07-18 11:15:00 2019-07-19 11:16:00 2019-07-19 10:45:00         24         23

这是你想要的吗?
如果不是,则提供一些输入记录和所需的确切结果。

【讨论】:

  • TIMESTAMPDIFF 只能返回一个估计值,因为时间戳减法返回一个相对时间段(尽管除非时间是在 DST 区域中的本地时间,否则它不会对列出的时间范围。不过,DST 会搞砸一切)。这应该可以通过在修改后的create 日期上进行范围查询来实现,但不需要TIMESTAMPDIFF
猜你喜欢
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 2015-07-20
相关资源
最近更新 更多