Last active
October 13, 2020 10:33
-
-
Save jpotts18/36e4f6d469fb9b66d94059f9d3e07497 to your computer and use it in GitHub Desktop.
Time Dimension for Postgres
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE TABLE "public"."times" ( | |
id int4 NOT NULL, | |
time time, | |
hour int2, | |
military_hour int2, | |
minute int4, | |
second int4, | |
minute_of_day int4, | |
second_of_day int4, | |
quarter_hour varchar, | |
am_pm varchar, | |
day_night varchar, | |
day_night_abbrev varchar, | |
time_period varchar, | |
time_period_abbrev varchar | |
) | |
WITH (OIDS=FALSE); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
TRUNCATE TABLE times; | |
-- Unknown member | |
INSERT INTO times VALUES ( | |
-1, --id | |
'0:0:0', -- time | |
0, -- hour | |
0, -- military_hour | |
0, -- minute | |
0, -- second | |
0, -- minute_of_day | |
0, -- second_of_day | |
'Unknown', -- quarter_hour | |
'Unknown', -- am_pm | |
'Unknown', -- day_night | |
'Unk', -- day_night_abbrev | |
'Unknown', -- time_period | |
'Unk' -- time_period_abbrev | |
); | |
INSERT INTO times | |
SELECT | |
to_char(datum, 'HH24MISS')::integer AS id, | |
datum::time AS time, | |
to_char(datum, 'HH12')::integer AS hour, | |
to_char(datum, 'HH24')::integer AS military_hour, | |
extract(minute FROM datum)::integer AS minute, | |
extract(second FROM datum) AS second, | |
to_char(datum, 'SSSS')::integer / 60 AS minute_of_day, | |
to_char(datum, 'SSSS')::integer AS second_of_day, | |
to_char(datum - (extract(minute FROM datum)::integer % 15 || 'minutes')::interval, 'hh24:mi') || | |
' – ' || | |
to_char(datum - (extract(minute FROM datum)::integer % 15 || 'minutes')::interval + '14 minutes'::interval, 'hh24:mi') | |
AS quarter_hour, | |
to_char(datum, 'AM') AS am_pm, | |
CASE WHEN to_char(datum, 'hh24:mi') BETWEEN '08:00' AND '19:59' THEN 'Day (8AM-8PM)' ELSE 'Night (8PM-8AM)' END | |
AS day_night, | |
CASE WHEN to_char(datum, 'hh24:mi') BETWEEN '08:00' AND '19:59' THEN 'Day' ELSE 'Night' END | |
AS day_night_abbrev, | |
CASE | |
WHEN to_char(datum, 'hh24:mi') BETWEEN '00:00' AND '03:59' THEN 'Late Night (Midnight-4AM)' | |
WHEN to_char(datum, 'hh24:mi') BETWEEN '04:00' AND '07:59' THEN 'Early Morning (4AM-8AM)' | |
WHEN to_char(datum, 'hh24:mi') BETWEEN '08:00' AND '11:59' THEN 'Morning (8AM-Noon)' | |
WHEN to_char(datum, 'hh24:mi') BETWEEN '12:00' AND '15:59' THEN 'Afternoon (Noon-4PM)' | |
WHEN to_char(datum, 'hh24:mi') BETWEEN '16:00' AND '19:59' THEN 'Evening (4PM-8PM)' | |
WHEN to_char(datum, 'hh24:mi') BETWEEN '20:00' AND '23:59' THEN 'Night (8PM-Midnight)' | |
END AS time_period, | |
CASE | |
WHEN to_char(datum, 'hh24:mi') BETWEEN '00:00' AND '03:59' THEN 'Late Night' | |
WHEN to_char(datum, 'hh24:mi') BETWEEN '04:00' AND '07:59' THEN 'Early Morning' | |
WHEN to_char(datum, 'hh24:mi') BETWEEN '08:00' AND '11:59' THEN 'Morning' | |
WHEN to_char(datum, 'hh24:mi') BETWEEN '12:00' AND '15:59' THEN 'Afternoon' | |
WHEN to_char(datum, 'hh24:mi') BETWEEN '16:00' AND '19:59' THEN 'Evening' | |
WHEN to_char(datum, 'hh24:mi') BETWEEN '20:00' AND '23:59' THEN 'Night' | |
END AS time_period_abbrev | |
FROM generate_series('2000-01-01 00:00:00'::timestamp, '2000-01-01 23:59:59'::timestamp, '1 second') datum; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment