Listar datas de um período determinado Firebird
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.
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
Curtidas 0
Melhor post
Emerson Nascimento
25/05/2022
exatamente como o Francisco Vitor publicou.
Apenas troque as datas por parâmetros.
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
GOSTEI 1
Mais Respostas
Francisco Vitor
25/05/2022
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.
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.
GOSTEI 0