Sql 当前时间戳内的日期-IBM DB2

Sql 当前时间戳内的日期-IBM DB2,sql,db2,Sql,Db2,我在一个表中有一列(ROW\u UPDATE\u TIME),当更新发生在这个表中时,它存储了时间戳 我想知道如何检查时间戳是今天的行。 这就是我现在使用的,但我认为这不是一个很好的解决方案: SELECT * FROM TABLE WHERE ROW_UPDATE_TIME BETWEEN (CURRENT TIMESTAMP - 1 DAY) AND (CURRENT TIMESTAMP + 1 DAY); 是否有更好的解决方案,例如:ROW\u UPDATE\u

我在一个表中有一列(ROW\u UPDATE\u TIME),当更新发生在这个表中时,它存储了时间戳

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

SELECT
    *
FROM
    TABLE
WHERE
    ROW_UPDATE_TIME BETWEEN (CURRENT TIMESTAMP - 1 DAY) AND (CURRENT TIMESTAMP + 1 DAY);
是否有更好的解决方案,例如:ROW\u UPDATE\u TIME=CURRENT DATE,或类似的东西?

找到了:

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

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

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

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

避免对where子句中比较的列应用函数(
DATE(row\u update\u time)=CURRENT\u DATE
)。这将导致优化器针对每一行运行函数,只是为了分配所需的数据。这可能会大大降低查询速度。试着对这两个版本运行explain,你就会明白我的意思。

这可能是一个“更漂亮”的解决方案,但它的性能可能会更差,特别是如果你期望基于索引的访问。这也是错误的,因为
时间戳
类型有小数秒。这个答案基本上跳过了一天的最后一秒。这回答了你的问题吗?