none
Inserir data RRS feed

  • Pergunta

  • Galera tenho duas datas e gostaria de realizar um insert que preenchesse os valores do banco com datas entre essas duas datas informadas.

    EX: data:10/10/2016 data2: 20/10/2016

    o insert iria preencher com 11,12,13,14/10 etc.. no banco.

    Como do esse comando.

    quarta-feira, 7 de dezembro de 2016 20:29

Respostas

  • Boa noite,

    SouthNew, segue uma outra sugestão para teste utilizando uma CTE recursiva:

    declare @DataIni date;
    declare @DataFim date;
    set @DataIni = '20161010';
    set @DataFim = '20161020';
    
    with CTE_Datas as
    (
        select @DataIni as Data
        
        union all
        
        select dateadd(day, 1, Data) from CTE_Datas where Data < @DataFim
    )
    
    insert into Tabela (Data)
        select Data from CTE_Datas

    Espero que ajude


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

    quarta-feira, 7 de dezembro de 2016 22:52

Todas as Respostas

  • Nao existe comando nativo que faça isso. Para isto voce vai ter que criar uma StoreProcedure

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quarta-feira, 7 de dezembro de 2016 20:53
  • O que da pra fazer e gerar as datas por exemplo

    DECLARE @DataInicio  DATETIME = DATEFROMPARTS(2016,10,10);
    
    DECLARE @DataTermino  DATETIME = DATEFROMPARTS(2016,10,31);
    
    DECLARE @TableDatas TABLE ( datagerada DATETIME)
    
    
    
    WHILE (DATEDIFF(DAY,@DataInicio,@DataTermino) <> 0)
    BEGIN
    		INSERT INTO @TableDatas
    		        ( datagerada )
    		VALUES  ( @DataInicio -- datagerada - datetime
    		          )
    		SET @DataInicio  = DATEADD(DAY,1,@DataInicio);
    
    END
    
    
    SELECT * FROM @TableDatas AS TD


    Wesley Neves

    quarta-feira, 7 de dezembro de 2016 21:41
  • Boa noite,

    SouthNew, segue uma outra sugestão para teste utilizando uma CTE recursiva:

    declare @DataIni date;
    declare @DataFim date;
    set @DataIni = '20161010';
    set @DataFim = '20161020';
    
    with CTE_Datas as
    (
        select @DataIni as Data
        
        union all
        
        select dateadd(day, 1, Data) from CTE_Datas where Data < @DataFim
    )
    
    insert into Tabela (Data)
        select Data from CTE_Datas

    Espero que ajude


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

    quarta-feira, 7 de dezembro de 2016 22:52
  • Boa noite,

    SouthNew, segue uma outra sugestão para teste utilizando uma CTE recursiva:

    declare @DataIni date;
    declare @DataFim date;
    set @DataIni = '20161010';
    set @DataFim = '20161020';
    
    with CTE_Datas as
    (
        select @DataIni as Data
        
        union all
        
        select dateadd(day, 1, Data) from CTE_Datas where Data < @DataFim
    )
    
    insert into Tabela (Data)
        select Data from CTE_Datas

    Espero que ajude


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

    muito boa essa alternativa, eu não conseguir fazer por CTE,parabéns


    Wesley Neves

    quarta-feira, 7 de dezembro de 2016 23:46
  • Obrigado Wesley. Abraço

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

    quinta-feira, 8 de dezembro de 2016 11:12
  • @Gamipex

    Vivendo e aprendendo... eu nao sabia que CTE podiam ser recursivos. Soluçao muito elegante.

    Merece ser impressa, emoldurada e colocar na sala.

    Obrigado


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quinta-feira, 8 de dezembro de 2016 14:13
  • Obrigado William. Abraço

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

    quinta-feira, 8 de dezembro de 2016 15:04
  • Deleted
    quinta-feira, 22 de dezembro de 2016 18:19