我的表中有一个列 (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,或类似的解决方案?
找到了:
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_update_time) = CURRENT_DATE
) 中比较的列。这将导致优化器针对每一行运行该函数,只是为了分配您需要的数据。它可能会大大减慢查询速度。尝试对这两个版本运行解释,你就会明白我的意思。