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;
我需要过滤查询结果以仅引入前一个工作日下午 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;