none
Listar as datas entre data inicial e final RRS feed

  • Pergunta

  • Pessoal

    Como quebrar em linhas todas as datas entre data inicial e final

    DHINICIO: 2019-01-17
    DHFINAL: 2019-01-20
    Resultado:

    2019-01-17

    2019-01-18

    2019-01-19

    2019-01-20

    sexta-feira, 18 de janeiro de 2019 17:11

Respostas

  • Boa tarde,

    Rafael, segue uma alternativa utilizando uma CTE recursiva:

    declare @DHINICIO date = '20190117';
    declare @DHFINAL date = '20190120';
    
    with CTE_Rec as
    (
        select @DHINICIO as Data
        
        union all
        
        select 
            DATEADD(DAY, 1, Data) 
        from CTE_Rec
        where
            Data < @DHFINAL
    )
    
    select * from CTE_Rec
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 18 de janeiro de 2019 17:27
  • Olá Rafael,

    Você pode fazer algo assim:

    DECLARE @DHINICIO DATE = '2019-01-17', @DHFINAL DATE = '2019-01-20', @DataAtual DATE
    
    SET @DataAtual= @DHINICIO
    
    CREATE TABLE #TmpDatas (Data DATE)
    
    
    
    WHILE @DataAtual <= @DHFINAL
    BEGIN
    
    	INSERT INTO #TmpDatas
    	SELECT @DataAtual
    
    
    	SELECT @DataAtual = DATEADD(Day, 1, @DataAtual)
    
    END
    
    SELECT * From #TmpDatas
    
    DROP TABLE #TmpDatas


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    sexta-feira, 18 de janeiro de 2019 17:24

Todas as Respostas

  • Olá Rafael,

    Você pode fazer algo assim:

    DECLARE @DHINICIO DATE = '2019-01-17', @DHFINAL DATE = '2019-01-20', @DataAtual DATE
    
    SET @DataAtual= @DHINICIO
    
    CREATE TABLE #TmpDatas (Data DATE)
    
    
    
    WHILE @DataAtual <= @DHFINAL
    BEGIN
    
    	INSERT INTO #TmpDatas
    	SELECT @DataAtual
    
    
    	SELECT @DataAtual = DATEADD(Day, 1, @DataAtual)
    
    END
    
    SELECT * From #TmpDatas
    
    DROP TABLE #TmpDatas


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    sexta-feira, 18 de janeiro de 2019 17:24
  • Boa tarde,

    Rafael, segue uma alternativa utilizando uma CTE recursiva:

    declare @DHINICIO date = '20190117';
    declare @DHFINAL date = '20190120';
    
    with CTE_Rec as
    (
        select @DHINICIO as Data
        
        union all
        
        select 
            DATEADD(DAY, 1, Data) 
        from CTE_Rec
        where
            Data < @DHFINAL
    )
    
    select * from CTE_Rec
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 18 de janeiro de 2019 17:27
  • Rafael, 

    A solução do gapimex é melhor e mais elegante que a minha. Se o seu SQL  for >=2008, use ela.


    Abraço.
    Mariana

    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    sexta-feira, 18 de janeiro de 2019 17:28
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 31 de janeiro de 2019 19:43
    Moderador