【问题标题】:Date inside current timestamp - IBM DB2当前时间戳内的日期 - IBM DB2
【发布时间】:2016-02-17 16:56:24
【问题描述】:

我在一个表中有一个列 (ROW_UPDATE_TIME),它存储了该表中发生更新时的时间戳

我想知道如何检查时间戳是今天的行。 这是我现在正在使用的,但我认为这不是一个很好的解决方案:

SELECT
    *
FROM
    TABLE
WHERE
    ROW_UPDATE_TIME BETWEEN (CURRENT TIMESTAMP - 1 DAY) AND (CURRENT TIMESTAMP + 1 DAY);

有没有更好的解决方案,例如:ROW_UPDATE_TIME = CURRENT DATE,或者类似的?

【问题讨论】:

标签: sql db2


【解决方案1】:

找到了:

SELECT
    *
FROM
    TABLE
WHERE
    DATE(ROW_UPDATE_TIME) = CURRENT DATE;

【讨论】:

  • 这可能是一个“更漂亮”的解决方案,但它的性能可能会更差,特别是如果您期望基于索引的访问。
【解决方案2】:

您提供的第一个版本不会返回您期望的结果,因为您将获得今天或明天的结果时间戳,具体取决于您运行它的时间。

使用下面的查询来获取今天的结果:

SELECT
    *
FROM
    table
WHERE
    row_update_time
        BETWEEN TIMESTAMP(CURRENT_DATE,'00:00:00')
        AND TIMESTAMP(CURRENT_DATE,'23:59:59')

避免将函数应用于您在 where 子句(DATE(row_update_time) = CURRENT_DATE) 中比较的列。这将导致优化器针对每一行运行该函数,只是为了分配您需要的数据。它可能会大大减慢查询速度。尝试对这两个版本运行解释,你会明白我的意思。

【讨论】:

  • 这也是错误的,因为TIMESTAMP 类型有小数秒。这个答案基本上跳过了一天的最后一秒。
猜你喜欢
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多