我的表中有一个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;