我有一个sql,我需要能够从今天凌晨4点到明天凌晨4点之间提取数据。我需要数据来显示每小时的生产,因为作业从凌晨4点一直持续到凌晨1点30分,我很难把识别午夜滚动的逻辑放进去。这需要自动提取日期,而不是手动输入日期。实质上:
where mod_date_time >= trunc(sysdate) + 4/24
and mod_date_time <= trunc(sysdate)+1 + 3/24 + 59/24*60
谢谢
发布于 2018-11-28 18:04:07
很容易用间隔期..。
where mod_date_time >= trunc(sysdate) + to_dsinterval('0 4:0:0') -- 4:00am today
and mod_date_time <= trunc(sysdate) + to_dsinterval('1 4:0:0') -- 4:00am tomorrow
..。除了这个障碍:
滚动的问题是,一旦午夜来临,日期就会调整。
因此,如果没有锚点,就不能在此查询中使用SYSDATE。你是否有一列代表换班日或开始时间?你可以用它来代替:
where mod_date_time >= trunc(shift_start_date) + to_dsinterval('0 4:0:0') -- 4:00am today
and mod_date_time <= trunc(shift_start_date) + to_dsinterval('1 4:0:0') -- 4:00am tomorrow
或者,您只需在历史模式下运行查询:
where mod_date_time >= trunc(sysdate-1) + to_dsinterval('0 4:0:0') -- 4:00am today
and mod_date_time <= trunc(sysdate) + to_dsinterval('0 4:0:0') -- 4:00am tomorrow
https://stackoverflow.com/questions/53524215
复制相似问题