Procedure - Retorna Meses Sequência
Estaremos compartilhando com vocês uma procedure que retorna de forma sequencial os meses, esta procedure permite definirmos se queremos meses abreviados ou não. Exemplo: Jan ou Janeiro, nos permite definir um numero de meses a retornar, e o numero de meses que serão exibidos:
create or alter procedure RETORNA_MESES_SEQUENCIA (
ABREVIAR varchar(1) not null,
RECUAR integer,
NUMEROMESES integer not null)
returns (
IDMES INTEGER,
MES varchar(20),
ANO integer)
as
declare variable COMPARAMES integer;
declare variable CONTADOR integer;
declare variable DATAINICIO date;
begin
DATAINICIO = dateadd(RECUAR month to current_date);
CONTADOR = 0;
while (NUMEROMESES > 0) do
begin
COMPARAMES = extract(month from (dateadd(CONTADOR month to DATAINICIO)));
ANO = extract(year from (dateadd(CONTADOR month to DATAINICIO)));
IDMES = COMPARAMES;
MES = case
when COMPARAMES = 1 and ABREVIAR = 'S' then 'Jan'
when COMPARAMES = 2 and ABREVIAR = 'S' then 'Fev'
when COMPARAMES = 3 and ABREVIAR = 'S' then 'Mar'
when COMPARAMES = 4 and ABREVIAR = 'S' then 'Abr'
when COMPARAMES = 5 and ABREVIAR = 'S' then 'Mai'
when COMPARAMES = 6 and ABREVIAR = 'S' then 'Jun'
when COMPARAMES = 7 and ABREVIAR = 'S' then 'Jul'
when COMPARAMES = 8 and ABREVIAR = 'S' then 'Ago'
when COMPARAMES = 9 and ABREVIAR = 'S' then 'Set'
when COMPARAMES = 10 and ABREVIAR = 'S' then 'Out'
when COMPARAMES = 11 and ABREVIAR = 'S' then 'Nov'
when COMPARAMES = 12 and ABREVIAR = 'S' then 'Dez'
when COMPARAMES = 1 and ABREVIAR = 'N' then 'Janeiro'
when COMPARAMES = 2 and ABREVIAR = 'N' then 'Fevereiro'
when COMPARAMES = 3 and ABREVIAR = 'N' then 'Mar?o'
when COMPARAMES = 4 and ABREVIAR = 'N' then 'Abril'
when COMPARAMES = 5 and ABREVIAR = 'N' then 'Maio'
when COMPARAMES = 6 and ABREVIAR = 'N' then 'Junho'
when COMPARAMES = 7 and ABREVIAR = 'N' then 'Julho'
when COMPARAMES = 8 and ABREVIAR = 'N' then 'Agosto'
when COMPARAMES = 9 and ABREVIAR = 'N' then 'Setembro'
when COMPARAMES = 10 and ABREVIAR = 'N' then 'Outubro'
when COMPARAMES = 11 and ABREVIAR = 'N' then 'Novembro'
when COMPARAMES = 12 and ABREVIAR = 'N' then 'Dezembro'
end;
CONTADOR = CONTADOR + 1;
NUMEROMESES = NUMEROMESES - 1;
suspend;
end
end
CÓDIGO ATUALIZADO POR ARTUR SILVA EM 15/05/2020: Adicionado mais dois campos no retorno, IDMES e ANO.
Abaixo exemplo de uso/resultado:
SELECT MES
FROM RETORNA_MESES_SEQUENCIA ('N', -3, 6)
No exemplo acima, estou fazendo a chamada para não abreviar, voltar 3 meses e trazer um total de 6 meses, abaixo o resultado obtido: (Executado 19/02/2020)
Resultado:
---- Novembro
---- Dezembro
---- Janeiro
---- Fevereiro
---- Março
---- Abril
Exemplo de uso abreviado:
SELECT MES
FROM RETORNA_MESES_SEQUENCIA ('S', -3, 6)
No exemplo acima, estou fazendo a chamada para abreviar, voltar 3 meses e trazer um total de 6 meses, abaixo o resultado obtido: (Executado 19/02/2020)
Resultado:
---- Nov
---- Dez
---- Jan
---- Fev
---- Mar
---- Abr
Exemplo de uso sem voltar:
SELECT MES
FROM RETORNA_MESES_SEQUENCIA ('N', 0, 6)
No exemplo acima, estou fazendo a chamada para não abreviar, não voltar e não incrementar meses e trazer um total de 6 meses, abaixo o resultado obtido: (Executado 19/02/2020)
Resultado:
---- Fevereiro
---- Março
---- Abril
---- Maio
---- Junho
---- Julho
Exemplo de uso com incremento de mês:
SELECT MES
FROM RETORNA_MESES_SEQUENCIA ('N', 2, 6)
No exemplo acima, estou fazendo a chamada para não abreviar, avançar 2 meses e trazer um total de 6 meses, abaixo o resultado obtido: (Executado 19/02/2020)
Resultado:
---- Abril
---- Maio
---- Junho
---- Julho
---- Agosto
---- Setembro
Exemplo de uso com incremento de mês:
SELECT IDMES,MES,ANO, IDMES || '/' || ANO AS MESANO
FROM RETORNA_MESES_SEQUENCIA ('S', -12, 13)
ORDER BY ANO, IDMES;
No exemplo acima, estou fazendo a chamada para buscar os últimos 12 meses (a partir da data atual), conforme resultado abaixo:
Resultado:
IDMES|MES |ANO |MESANO |
-----|---------|----|-------|
5|Mai |2019|5/2019 |
6|Jun |2019|6/2019 |
7|Jul |2019|7/2019 |
8|Ago |2019|8/2019 |
9|Set |2019|9/2019 |
10|Out |2019|10/2019|
11|Nov |2019|11/2019|
12|Dez |2019|12/2019|
1|Jan |2020|1/2020 |
2|Fev |2020|2/2020 |
3|Mar |2020|3/2020 |
4|Abr |2020|4/2020 |
5|Mai |2020|5/2020 |