日期时间逻辑为红移的情况



我的表中有一个datetime列,我想创建一个新列,用case when语法解释最大日期。

表是这样的:

schedule                 
11 April,2023, 13:00
11 April,2023, 14:00
11 April, 2023, 17:00

如果时间超过17:00,那么最大日期将在第二天,如果时间小于17:00,那么最大日期将在同一天的23:59。

预期结果:

schedule                  max_date        
11 April,2023, 13:00      11 April, 2023, 23:59
11 April,2023, 14:00      11 April, 2023, 23:59
11 April, 2023, 17:00     12 April, 2023, 17:00
到目前为止,我所做的是:
select
schedule,
case when extract(hour from schedule) >= 17 then schedule + 1 else (missing query) end as max_date
from data

当schedule hour小于17时,我无法继续查询。max_date应该在同一天,但时间是在24:00

我如何在红移的max_date列中获得预期的结果?

提前谢谢你

2023年4月11日,24:00实际上是(正确的)2023年4月12日,00:00。所以你可以在"计划"中增加一天。并截断到当天

还有"schedule + 1";是模棱两可的,所以我将通过将其更改为";schedule + interval '1 day'"来清除它。

把这些放在一起:

select
schedule,
case when extract(hour from schedule) >= 17 then schedule + interval '1 day' 
else trunc(schedule)::timestamp + interval '1 day'
end as max_date
from data;

=======================================

得到23:59你只需要减去一分钟(或一秒或一毫秒或…)

select
schedule,
case when extract(hour from schedule) >= 17 then schedule + interval '1 day' 
else trunc(schedule)::timestamp + interval '1 day' - interval '1 minute'
end as max_date
from data;

相关内容

  • 没有找到相关文章

最新更新