How to make an hours of week dimension table
16 Apr 2021
select row_number() over () as id, the_time::time as start_time, the_time::time + interval '1 hour' as end_time, extract(hour from the_time) as hour, to_char(the_time, 'Day') as day_str, extract(dow from the_time) as day_int, to_char(the_time, 'am') as am_pm from generate_series(timestamp '2021-01-31', timestamp '2021-02-06 23:00:00', interval '1 hour') as t(the_time);
Yields
┌─────┬────────────┬──────────┬──────┬───────────┬─────────┬───────┐ │ id │ start_time │ end_time │ hour │ day_str │ day_int │ am_pm │ ├─────┼────────────┼──────────┼──────┼───────────┼─────────┼───────┤ │ 1 │ 00:00:00 │ 01:00:00 │ 0 │ Sunday │ 0 │ am │ │ 2 │ 01:00:00 │ 02:00:00 │ 1 │ Sunday │ 0 │ am │ │ 3 │ 02:00:00 │ 03:00:00 │ 2 │ Sunday │ 0 │ am │ │ 4 │ 03:00:00 │ 04:00:00 │ 3 │ Sunday │ 0 │ am │ │ 5 │ 04:00:00 │ 05:00:00 │ 4 │ Sunday │ 0 │ am │ ... │ 165 │ 20:00:00 │ 21:00:00 │ 20 │ Saturday │ 6 │ pm │ │ 166 │ 21:00:00 │ 22:00:00 │ 21 │ Saturday │ 6 │ pm │ │ 167 │ 22:00:00 │ 23:00:00 │ 22 │ Saturday │ 6 │ pm │ │ 168 │ 23:00:00 │ 00:00:00 │ 23 │ Saturday │ 6 │ pm │ └─────┴────────────┴──────────┴──────┴───────────┴─────────┴───────┘ (168 rows)