none
Dividir intervalo de datas em semanas RRS feed

  • Pergunta

  • Olá pessoal,

    Teria alguma forma simples de extrair as semanas dado um intervalo de datas, por exemplo:

    data inicio: 01/11/2011

    data fim: 30/11/2011

    Dado as datas acima como poderia automatizar a extração das semanas contidas neste intervalo?

    Resultado esperado:

    Semana 1 = 01/11/2011 (Terça) a 05/11/2011(Sábado)

    Semana 2 = 06/11/2011 (Domingo) a 12/11/2011(Sábado)

    Semana 3 = 13/11/2011 (Domingo) a 19/11/2011(Sábado)

    Semana 4 = 20/11/2011 (Domingo) a 26/11/2011(Sábado)

    Semana 5 = 27/11/2011 (Domingo) a 30/11/2011 (Terça) 

    Obrigado!!!


    Ricardo Filho
    sexta-feira, 9 de dezembro de 2011 19:16

Respostas

  • Ricado,

     

    Eu desconheco maneira mais simples, todo caso, assim funciona:

    /*CREATE TABLE Datas

    (DATA DATETIME)

     

    SET DATEFORMAT YMD

    DECLARE @Data DATETIME

    SET @Data = '2011-11-01'

     

    WHILE(@Data < '2011-12-01')

    BEGIN

          INSERT INTO Datas VALUES (@Data)

          SET @Data = @Data + 1

    END

    */

    SELECT DATA,

    CASE

    WHEN DATEPART(WEEK, DATA) = (SELECT MIN(DATEPART(WEEK, DATA)) FROM Datas)

          THEN 'SEMANA 01'

    WHEN DATEPART(WEEK, DATA) = (SELECT MIN(DATEPART(WEEK, DATA))+1 FROM Datas)

          THEN 'SEMANA 02'

    WHEN DATEPART(WEEK, DATA) = (SELECT MIN(DATEPART(WEEK, DATA))+3 FROM Datas)

          THEN 'SEMANA 03'

    WHEN DATEPART(WEEK, DATA) = (SELECT MIN(DATEPART(WEEK, DATA))+4 FROM Datas)

          THEN 'SEMANA 04'

    WHEN DATEPART(WEEK, DATA) = (SELECT MIN(DATEPART(WEEK, DATA))+5 FROM Datas)

          THEN 'SEMANA 05'

    ELSE

          'SEMANA03' END AS Semana

    FROM Datas


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    sexta-feira, 9 de dezembro de 2011 19:37
    Moderador

Todas as Respostas

  • Ricado,

     

    Eu desconheco maneira mais simples, todo caso, assim funciona:

    /*CREATE TABLE Datas

    (DATA DATETIME)

     

    SET DATEFORMAT YMD

    DECLARE @Data DATETIME

    SET @Data = '2011-11-01'

     

    WHILE(@Data < '2011-12-01')

    BEGIN

          INSERT INTO Datas VALUES (@Data)

          SET @Data = @Data + 1

    END

    */

    SELECT DATA,

    CASE

    WHEN DATEPART(WEEK, DATA) = (SELECT MIN(DATEPART(WEEK, DATA)) FROM Datas)

          THEN 'SEMANA 01'

    WHEN DATEPART(WEEK, DATA) = (SELECT MIN(DATEPART(WEEK, DATA))+1 FROM Datas)

          THEN 'SEMANA 02'

    WHEN DATEPART(WEEK, DATA) = (SELECT MIN(DATEPART(WEEK, DATA))+3 FROM Datas)

          THEN 'SEMANA 03'

    WHEN DATEPART(WEEK, DATA) = (SELECT MIN(DATEPART(WEEK, DATA))+4 FROM Datas)

          THEN 'SEMANA 04'

    WHEN DATEPART(WEEK, DATA) = (SELECT MIN(DATEPART(WEEK, DATA))+5 FROM Datas)

          THEN 'SEMANA 05'

    ELSE

          'SEMANA03' END AS Semana

    FROM Datas


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    sexta-feira, 9 de dezembro de 2011 19:37
    Moderador
  • Ricardo,

     

    Também não conheço outra possibilidade a não ser utilizar a função Datepart com a opção Week!!!


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    domingo, 11 de dezembro de 2011 01:24
  • Obrigado Fabrizzio, deu certo!
    Ricardo Filho
    segunda-feira, 12 de dezembro de 2011 16:37