Eu estou querendo saber se é possível usar as funções date-time , concat e case do postgresql para fornecer um dos seguintes resultados:
- 4 a 11 de junho de 2019 ( quando a 1ª e a 2ª data estiverem no mesmo mês )
- 27 de julho a 3 de julho de 2019 ( onde a 1ª e a 2ª data são em meses diferentes, mas no mesmo ano civil )
- 29 de dezembro de 2019 a 4 de janeiro de 2020 ( quando a 1ª e a 2ª data estão em meses e anos diferentes )
Estou planejando criar uma VIEW que será usada para postar atualizações de status (como no Twitter) quando a dica semanal for alterada. Na minha programação procuro utilizar ao máximo as funções nativas dos bancos de dados. Em um mundo ideal, eu não usaria o código-fonte para fazer isso, desde que o postgresql seja capaz de fazer isso sozinho.
A consulta SELECT para VIEW que criei até agora é:
SELECT 'chronic pain'::text AS section,
'https://rons-home.net/en/living-life-lab/tips/living-with-chronic-pain'::text AS link,
tips_chronic_pain.reference,
tips_chronic_pain.tip,
tips_chronic_pain_weekly_selection.start_date,
tips_chronic_pain_weekly_selection.end_date
FROM tips_chronic_pain
JOIN tips_chronic_pain_weekly_selection ON tips_chronic_pain.reference = tips_chronic_pain_weekly_selection.tips_chronic_pain_reference
ORDER BY tips_chronic_pain_weekly_selection.start_date DESC
LIMIT 1
Criei as 2 tabelas a seguir:
A Tabela 1 contém todas as dicas:
CREATE TABLE public.tips_chronic_pain
(
reference bigint NOT NULL DEFAULT nextval('tips_chronic_pain_reference_seq'::regclass),
tip text,
add_date timestamp with time zone DEFAULT now(), -- UTC
membership_reference bigint,
CONSTRAINT tips_chronic_pain_pkey PRIMARY KEY (reference)
)
A Tabela 2 determina qual dica está sendo exibida no momento:
CREATE TABLE public.tips_chronic_pain_weekly_selection
(
reference bigint NOT NULL DEFAULT nextval('tips_chronic_pain_weekly_selection_reference_seq'::regclass),
tips_chronic_pain_reference bigint,
start_date timestamp with time zone DEFAULT now(), -- UTC
end_date timestamp with time zone DEFAULT now(), -- UTC
CONSTRAINT tips_chronic_pain_weekly_selection_pkey PRIMARY KEY (reference)
)
- A coluna tips_chronic_pain_weekly_selection.start_date fornece a primeira data
- A coluna tips_chronic_pain_weekly_selection.end_date fornece a segunda data
Vejamos algumas saídas:
Você poderia facilmente modificar isso para assumir dois valores.