计算Postgres最近的工作日

Dus*_*tin 6 sql postgresql date

我需要根据订单的请求交货日期在postgres查询中安排一些项目.因此,例如,订单在星期一(例如20120319)具有请求的交货,并且订单需要在前一个工作日(20120316)准备.

关于最直接方法的想法?我愿意添加日期表.我认为必须有一个比一长串案例陈述更好的方法:SELECT EXTRACT(DOW FROM TIMESTAMP'2001-02-16 20:38:40');

Pyr*_*ite 8

这可以让你前一个工作日.

SELECT 
    CASE (EXTRACT(ISODOW FROM current_date)::integer) % 7
        WHEN 1 THEN current_date-3
        WHEN 0 THEN current_date-2
        ELSE current_date-1
    END AS previous_business_day
Run Code Online (Sandbox Code Playgroud)


Clo*_*eto 7

要有上一个工作日:

select max(s.a) as work_day
from (
    select s.a::date
    from generate_series('2012-01-02'::date, '2050-12-31', '1 day') s(a)
    where extract(dow from s.a) between 1 and 5
    except
    select holiday_date
    from holiday_table
    ) s
where s.a < '2012-03-19'
;
Run Code Online (Sandbox Code Playgroud)

如果您想要下一个工作日,只需反转查询.