Listar datas de um período determinado Firebird

25/05/2022

0

Bom dia!
estou precisando fazer um select da seguinte forma: Vou passar uma data inicial exemplo 01/02/2022, e uma data final exemplo 30/04/2022, e preciso que o select me retorne todos os dias dentro desse período, assim:
01/02/2022
02/02/2022
03/02/2022
...
...
30/04/2022

pensei em fazer um select pegando a a data final e ir subtraindo 1 até chegar na data inicial mas quando o período incluir Fevereiro não vai funcionar pois não vou ter como saber se ele teve 28 ou 29 dias. Não possuo nenhuma tabela que guarde essas datas que quero selecionar, as únicas datas que terei acesso serão a de inicio e fim. Procurei e vi vários fóruns com a mesma duvida que eu mas em nenhum houve um solução.
Desde já agradeço.
Francisco Vitor

Francisco Vitor

Responder

Post mais votado

25/05/2022

exatamente como o Francisco Vitor publicou.
Apenas troque as datas por parâmetros.
with recursive dt as (
    select cast(:dataini as date) as dt
    from rdb$database
    union all
    select dt.dt + 1
    from dt
    where dt < cast(:datafim as date)
)
select dt.dt from dt

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

25/05/2022

Francisco Vitor

Bom dia!
estou precisando fazer um select da seguinte forma: Vou passar uma data inicial exemplo 01/02/2022, e uma data final exemplo 30/04/2022, e preciso que o select me retorne todos os dias dentro desse período, assim:
01/02/2022
02/02/2022
03/02/2022
...
...
30/04/2022

pensei em fazer um select pegando a a data final e ir subtraindo 1 até chegar na data inicial mas quando o período incluir Fevereiro não vai funcionar pois não vou ter como saber se ele teve 28 ou 29 dias. Não possuo nenhuma tabela que guarde essas datas que quero selecionar, as únicas datas que terei acesso serão a de inicio e fim. Procurei e vi vários fóruns com a mesma duvida que eu mas em nenhum houve um solução.
Desde já agradeço.



Encontrei aqui a solução:
with recursive dt as (
select cast('2021-02-01' as date) as dt
from rdb$database
union all
select dt.dt + 1
from dt
where dt < cast('2021-03-31' as date)) select dt.dt from dt

esse sql está reconhecendo se for bissexto então é perfeito para não se preocupar com fevereiro.
estou usando Firebird 2.5 e testando o comando sql no IBExpert.

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar