select n::date days , date_part( 'isodow' , n) isodow , to_char(n , 'DY') weekname , case when date_part( 'isodow' , n) in (6,7) then'vacation' when n >= ('2020-10-01'::date+interval'1 month'-interval'5 day')::timestampthen'danger' when date_part( 'isodow' , n) in (1,5) then'warning' else'job' end status from generate_series( '2020-10-01'::timestamp , ('2020-10-01'::date+interval'1 month'-interval'1 day')::timestamp , interval'1 day' ) n