Очень простая таблица измерений DAY, которая должна работать для большинства версий PostgreSQL (я использую 10.5). Это просто то, что должно помочь новичку в хранилище данных создать базовое c дневное измерение для использования при начале работы.
Создание дневной таблицы
CREATE TABLE day (
day_key SERIAL PRIMARY KEY, -- SERIAL is an integer that will auto-increment as new rows added
description VARCHAR(40), -- a 'string' for a description
full_date DATE, -- an actual date type
month_number INTEGER,
month_name VARCHAR(40),
year INTEGER
);
Вставка строк в Дневное измерение
INSERT INTO day(description, full_date, month_number, month_name, year)
SELECT
to_char(days.d, 'FMMonth DD, YYYY'),
days.d::DATE,
to_char(days.d, 'MM')::integer,
to_char(days.d, 'FMMonth'),
to_char(days.d, 'YYYY')::integer
from (
SELECT generate_series(
('2019-01-01')::date, -- 'start' date
('2019-12-31')::date, -- 'end' date
interval '1 day' -- one for each day between the start and day
)) as days(d);
Результат
Примечания :
- В основном вы используете только строки, сгенерированные вложенным
SELECT generate_series(...
для вставки в таблицу Day. - Я дважды использовал
FM
выше, чтобы удалить некоторые из пробелов, автоматически генерируемых в некоторых из этих форматов даты. - Я бы рекомендовал удалить строку
INSERT INTO day(...)
в первый раз Вы делаете это только для того, чтобы убедиться, что формат каждого столбца соответствует тому, что вам нужно, прежде чем вставить его в таблицу.
Это то, что я видел обычно используемым - проверьте, есть ли в документации PostgreSQL более подробные и полезные примеры других способов форматирования типов даты и получения всех видов. полезных размеров.