none
Pegar data de início e de fim de uma semana do mês RRS feed

  • Pergunta

  • Boa tarde, pessoal.

    Hoje estou com um problema em pegar a data inicial e final de uma semana do mês. Vamos por partes:

    Eu tenho uma combo que me traz as semanas de um mês postado. Pra saber quantas semanas eu tenho em Janeiro de 2015, por exemplo, eu uso o seguinte SQL:

    SELECT theLast - theFirst + 1 AS Semanas
    FROM (
        SELECT 1 + Number AS theMonth,
        DATEDIFF(DAY, -1, DATEADD(MONTH, Number, DATEADD(YEAR, 2015 - 1900, 0))) / 7 AS theFirst,
        DATEDIFF(DAY, -1, DATEADD(MONTH, Number, DATEADD(YEAR, 2015 - 1900, 30))) / 7 AS theLast
        FROM master..spt_values
        WHERE Type = 'P' AND Number < 12
    ) AS d 
    WHERE d.theMonth = 01

    Até este ponto ok, bem tranquilo. Retornou 5 semanas. O problema está em encontrar o início e o fim de uma semana. Por exemplo, se eu postar semana = 03 e mês = 01, deverá me mostrar '2015-01-11' como inicial e '2015-01-17' como final.

    Alguém tem ideia de como fazer isso?


    • Editado Isabela Ribeiro segunda-feira, 20 de julho de 2015 18:30 ajuste no título
    segunda-feira, 20 de julho de 2015 18:30

Respostas

Todas as Respostas

  • Deleted
    • Marcado como Resposta Isabela Ribeiro segunda-feira, 20 de julho de 2015 19:16
    segunda-feira, 20 de julho de 2015 19:09
  • Com a tua resposta cheguei na solução, só precisei ajustar o teu código pra usar um Id para localizar a semana correta!

    Obrigada José!

    -- código 1
    declare @MêsAno varchar(7), @Dia1 DATE, @Id INT = 1;
    set @MêsAno = '1/2015';  --< mês/ano, sem espaços
    
    --
    set @Dia1= Convert(date, '1/' + @MêsAno, 103);
    set DateFirst 7;
    
    declare @InicioSemana date, @FinalSemana date;
    set @InicioSemana= DateAdd(day, 1 - DatePart(weekday, @Dia1), @Dia1);
    set @FinalSemana= DateAdd(day, +6, @InicioSemana);
    
    while Month(@InicioSemana) = Month(@Dia1) or
          Month(@FinalSemana) = Month(@Dia1) 
      begin
    	  SELECT @Id, @InicioSemana, @FinalSemana;
    	  set @InicioSemana= DateAdd(day, +7, @InicioSemana);
    	  set @FinalSemana= DateAdd(day, +6, @InicioSemana);
    	  set @Id = @Id+1;
      END;


    segunda-feira, 20 de julho de 2015 19:20
  • Deleted
    segunda-feira, 20 de julho de 2015 20:00