SQL - 如何按时间戳过滤前一天特定时间后的任何内容

SQL - how to filter by timestamp looking for anything after a certain time on a previous day

我需要过滤查询结果以仅引入前一个工作日下午 5 点之后创建的数据行,直到当前时间,工作日为周一至周五。我可以过滤前一个工作日,我可以按时间戳过滤...但我不能合并这两个以便在前一个工作日下午 5 点之后过滤。

所以对于时间戳过滤器,该字段是调用 'create_ts',我可以像这样在下午 5 点之后进行过滤: AND to_char(create_ts, 'HH24:MI:SS') >= '17:00:00'

对于前一个工作日,我可以这样过滤: 和 a.create_ts >= trunc(prevbd(sysdate))

如何在下午 5 点后过滤 a.create_ts >= trunc(prevbd(sysdate)?

如果 prevbd 是一个函数,您定义了 returns 前一个工作日的 date(我猜测您正在调用 trunc 它 returns 一个 date 是前一个工作日的当前时间,这似乎是一个奇怪的设计选择),然后只是

a.create_ts >= trunc( prevbd(sysdate) ) + interval '17' hour

在前一个工作日下午 5 点之后查找东西。

您可以使用(不需要 user-defined 函数):

SELECT *
FROM   table_name
WHERE  a.create_ts >= LEAST(
                        -- Yesterday
                        TRUNC(SYSDATE) - 1,
                        -- Friday of the week containing yeasterday
                        TRUNC(TRUNC(SYSDATE) - 1, 'IW') + 4
                      ) + INTERVAL '17' HOUR
AND    a.create_ts <  SYSDATE;