none
Montagem de período RRS feed

  • Pergunta

  •  

    Bom Dia!

     

    Pessoal, estou eu aqui novamente precisando da ajuda de vcs.

     

    Tenho que montar todos os dias de um período.

    Exemplo: Período 15/02/2008  a 15/03/2008

    tenho que retornar em linhas:

     

    15/02/2008

    16/02/2008

    16/02/2008

    ...

     

    14/03/2008

    15/03/2008

     

    Será que alguém pode me ajudar!

     

    Desde já agradeço a atenção de todos!

     

    quinta-feira, 28 de agosto de 2008 14:31

Respostas

  • Boa Tarde,

     

    Segue uma solução baseada em 2005. Se precisar de mais de 1.000 dias de intervalo, adicione um N4.

     

    Code Snippet

    DECLARE @DataInicial SMALLDATETIME, @DataFinal SMALLDATETIME

    SET @DataInicial = '20080215'

    SET @DataFinal = '20080315';

     

    WITH Numeros (NUM) AS (

    SELECT 0 UNION ALL

    SELECT 1 UNION ALL

    SELECT 2 UNION ALL

    SELECT 3 UNION ALL

    SELECT 4 UNION ALL

    SELECT 5 UNION ALL

    SELECT 6 UNION ALL

    SELECT 7 UNION ALL

    SELECT 8 UNION ALL

    SELECT 9 ),

     

    RangeTotal (Val) AS (

    SELECT ROW_NUMBER() OVER (ORDER BY N1.NUM ASC) AS Numero

    FROM Numeros AS N1, Numeros AS N2, Numeros AS N3)

     

    SELECT @DataInicial + Val FROM RangeTotal

    WHERE DATEADD(DD,Val,@DataInicial) <= @DataFinal

     

     

    Dá pra fazer usando tabelas temporárias e Loops, mas preferi fazer uma solução explorando os novos recursos

     

    [ ]s,

     

    Gustavo

    quinta-feira, 28 de agosto de 2008 16:04

Todas as Respostas

  • Olá Eduardo,

     

    Seu SQL Server é 2005 ?

     

    [ ]s,

     

    Gustavo

     

    quinta-feira, 28 de agosto de 2008 14:48
  • Sim.

    quinta-feira, 28 de agosto de 2008 15:01
  • Boa Tarde,

     

    Segue uma solução baseada em 2005. Se precisar de mais de 1.000 dias de intervalo, adicione um N4.

     

    Code Snippet

    DECLARE @DataInicial SMALLDATETIME, @DataFinal SMALLDATETIME

    SET @DataInicial = '20080215'

    SET @DataFinal = '20080315';

     

    WITH Numeros (NUM) AS (

    SELECT 0 UNION ALL

    SELECT 1 UNION ALL

    SELECT 2 UNION ALL

    SELECT 3 UNION ALL

    SELECT 4 UNION ALL

    SELECT 5 UNION ALL

    SELECT 6 UNION ALL

    SELECT 7 UNION ALL

    SELECT 8 UNION ALL

    SELECT 9 ),

     

    RangeTotal (Val) AS (

    SELECT ROW_NUMBER() OVER (ORDER BY N1.NUM ASC) AS Numero

    FROM Numeros AS N1, Numeros AS N2, Numeros AS N3)

     

    SELECT @DataInicial + Val FROM RangeTotal

    WHERE DATEADD(DD,Val,@DataInicial) <= @DataFinal

     

     

    Dá pra fazer usando tabelas temporárias e Loops, mas preferi fazer uma solução explorando os novos recursos

     

    [ ]s,

     

    Gustavo

    quinta-feira, 28 de agosto de 2008 16:04
  • Gustavo,

     

    muito obrigado!!! Resolveu o meu problema!

     

    Abraço!

     

    quinta-feira, 28 de agosto de 2008 16:16