我希望更新自特定日期和时间起24小时内的记录查询。当前查询工作正常,但我需要手动更新两个时间戳。我希望将时间戳数量减少为一个或将其替换为动态表达式,以便尽可能减少人为错误。
当前查询如下所示:
SELECT timestamp
FROM table
WHERE timestamp BETWEEN '2023-01-18-06.00.00.000000' AND '2023-01-19-06.00.00.000000'
我一直在尝试多个推荐的选项,但它还不起作用:
WHERE timestamp > '2023-01-19-06.00.00.000000' - 24 HOURS
WHERE timestamp > '2023-01-19-06.00.00.000000' – ‘24 HOURS’
WHERE timestamp ('2023-01-19-06.00.00.000000' - 24 HOURS)
WHERE timestamp > '2023-01-19-06.00.00.000000' - '24.00.00.000000'
WHERE timestamp BETWEEN '2023-01-04-06.00.00.000000' AND INTERVAL - 24 HOURS
WHERE timestamp > CURRENT DATE - 24 HOURS
WHERE timestamp ('2023-01-19' - 1 DAY, ('06.00.00.000000' - 24 HOURS))
谁能告诉我我做错了什么?
2条答案
按热度按时间juzqafwq1#
'2023-01-19-06.00.00.000000' - 24 HOURS很接近,但不正确,因为DB2不会将第一个值视为时间戳,而是视为字符串,即使它在工作查询中进行了自动转换。因此,您必须做的是告诉它是时间戳,因为您添加了持续时间
使用
timestamp
关键字或
timestamp
函数或者这个符号
如果您没有使用DB2 LUW或更早版本,则可能有一个或多个选项不可用
我建议你试试这样的
pprl5pva2#
在过去24小时内,如您的示例所示
WHERE timestamp > CURRENT DATE - 24 HOURS
您可能希望使用
CURRENT TIMESTAMP
,而不是CURRENT DATE
对于特定的时间段,您总是需要在
WHERE
子句中指定两个日期,如下所示WHERE timestamp BETWEEN startTs AND endTs
对于从给定的开始时间戳开始的特定24小时期间,您可以执行如下操作:
WHERE timestamp BETWEEN startTs AND startTs + 24 hours
您可以将
startTs
定义为全局变量,并在select
中使用它或者您可以使用表值构造函数来存储它以供...
根据您的用例,将语句封装为存储过程或用户定义的表函数(UUTF)可能是值得的...