自定义Postgres功能用于学期日期和时间

时间:2014-03-20 16:42:30

标签: sql postgresql

假设我有一个只有三列的大表。

整数id, 时间戳ts, 双值

如果我想获得给定复杂日期表达式的值,那么实现该目标的最佳方法是什么?

例如,如果我希望在周末和工作日的18:00到8:00之间以及2014年的学校假期的任何时间获得所有价值。

显然,其中一些时间是可变的,因此解决方案应该是动态的。我刚在想 在另一个表中存储学校假期等一系列日期间隔以进行检查。但是,我想创建一个自定义的Postgres函数来隐藏一些复杂性。

有没有人知道类似的代码或有建议? 特别是处理上述时间的情况,除了周末逻辑?

由于

1 个答案:

答案 0 :(得分:1)

带假期表

select *
from
    t
    left join
    holiday on date_trunc('day', t.ts) = holiday.day
where
    extract(dow from ts) in (0, 6) -- Weekend
    or
    (extract(hour from ts) >= 18 and extract(hour from ts) <= 8)
    or
    holiday.day is not null -- Holiday