Tenho uma coluna (somecolumn) em uma tabela (sometable) no seguinte formato (DATE):2025-01-01 00:00:00
Usando SQL, quero criar as 2 colunas a seguir:
1) Extraia o número do mês com base no calendário abril-abril, ou seja, abril = 1, maio = 2, ...
2) Identifique o ano com base no calendário abril-abril, ou seja, 1º de janeiro de 2025 está no ano de 2024-2025.
O primeiro é fácil de fazer manualmente:
SELECT
CASE
WHEN EXTRACT(MONTH FROM somedate) = 4 THEN 1
WHEN EXTRACT(MONTH FROM somedate) = 5 THEN 2
WHEN EXTRACT(MONTH FROM somedate) = 6 THEN 3
WHEN EXTRACT(MONTH FROM somedate) = 7 THEN 4
WHEN EXTRACT(MONTH FROM somedate) = 8 THEN 5
WHEN EXTRACT(MONTH FROM somedate) = 9 THEN 6
WHEN EXTRACT(MONTH FROM somedate) = 10 THEN 7
WHEN EXTRACT(MONTH FROM somedate) = 11 THEN 8
WHEN EXTRACT(MONTH FROM somedate) = 12 THEN 9
WHEN EXTRACT(MONTH FROM somedate) = 1 THEN 10
WHEN EXTRACT(MONTH FROM somedate) = 2 THEN 11
WHEN EXTRACT(MONTH FROM somedate) = 3 THEN 12
END AS new_month
FROM sometable;
O segundo é mais confuso. Tentei pensar na lógica dividindo os meses em (janeiro-março e outros):
CASE
WHEN EXTRACT(MONTH FROM somecolumn) <= 3
THEN (EXTRACT(YEAR FROM somecolumn) - 1) || '-' || EXTRACT(YEAR FROM somecolumn)
ELSE EXTRACT(YEAR FROM somecolumn) || '-' || (EXTRACT(YEAR FROM somecolumn) + 1)
END AS new_year
FROM sometable;
Essa é a lógica correta?