Ir para conteúdo
Fórum Script Brasil
  • 0

Semana do Ano + primeiro e ultimo dia da semana


GuilhermeRomero

Pergunta

Eai pessoal beleza?!?!

então galera sou novataço em SQL... e me passaram alguns relatorio para automatizar boa parte já ta feita, mas estou com uma dificuldade animal em uma tabela auxiliar que tive q montar... nele eu insiro manualmente a SEMANA DO ANO, o INICIO DA SEMANA e o FIM DA SEMANA. tinha feito uma consulta em SQL q pegava as semanas do ano eu acabava cagado o codigo quando tentava puxar o inicio e o fim dela.

Segue um exemplo da tabela:

(ano 2011)

Semana Início Fim

1 01/jan 01/jan

2 02/jan 08/jan

3 09/jan 15/jan

4 16/jan 22/jan

5 23/jan 29/jan

6 30/jan 05/fev

7 06/fev 12/fev

8 13/fev 19/fev

9 20/fev 26/fev

10 27/fev 05/mar

11 06/mar 12/mar

12 13/mar 19/mar

13 20/mar 26/mar

14 27/mar 02/abr

Se vocês tiverem um codigo que monte ela direto agradeço muito!!!

vlw!!

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Gilherme,

Não tenho o script montado, mas montei um para você. Se não for isso, poderá fazer a adaptação. Espero que ajuda.

OBS.: dá uma olhada na configuração de data do seu banco.

DECLARE @Contador INT
DECLARE @Data datetime

SET @Contador = 1
SET @Data = '2011-01-01'

WHILE @Contador <= 365 
BEGIN
    IF DATEPART (w, @Data) = 1
    PRINT (@Data)
    
    IF DATEPART (w, @Data) = 6
    PRINT (@Data)
    
    SET @Contador = @Contador + 1
    SET @Data = (dateadd (d, 1, @Data))
END

Link para o comentário
Compartilhar em outros sites

  • 0

Ooo Brigadao cara mas no seu codigo ele não esta trazendo exatamente o começo e o fim da semana =/... mas me ajudo e tive a seguinte ideia.

Criei uma tabela auxiliar chamada TBL_SEMANAS_ANO

e montei a seguinte PROC

declare @dt_ini datetime, @dt_fim datetime
set @dt_ini =  convert(varchar, year(getdate()))+'-01-01'
    --convert(datetime, '2011-01-01')
set @dt_fim = convert(varchar, year(getdate())+1)+'-01-01'
    --convert(datetime, '2012-01-01')

while @dt_ini < @dt_fim
begin
    INSERT INTO [DB_TEMP].[dbo].[TBL_SEMANAS_ANO]
           ([SEMANA],[DATA])
    select datepart(wk, @dt_ini) as semana, @dt_ini as data

    set @dt_ini = dateadd(day, 1, @dt_ini)
end

/*

select semana, Min(data) as Inicio_Semana, Max(data) as Fim_Semana
from [DB_TEMP].[dbo].[TBL_SEMANAS_ANO]
group by semana
order by semana

*/
Se você tiver uma ideia para melhorar agradeço. vlwww!!!
Boa tarde Gilherme, Não tenho o script montado, mas montei um para você. Se não for isso, poderá fazer a adaptação. Espero que ajuda. OBS.: dá uma olhada na configuração de data do seu banco.
DECLARE @Contador INT
DECLARE @Data datetime

SET @Contador = 1
SET @Data = '2011-01-01'

WHILE @Contador <= 365 
BEGIN
    IF DATEPART (w, @Data) = 1
    PRINT (@Data)
    
    IF DATEPART (w, @Data) = 6
    PRINT (@Data)
    
    SET @Contador = @Contador + 1
    SET @Data = (dateadd (d, 1, @Data))
END

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Guilherme,

Completei o script, mais ficou um pouco demorado por causa da quantidade de dados a serem pesquisadas. Dê uma olhada e qualquer coisa pode postar...

CREATE TABLE #TBL_SEMANAS_ANO (SEMANA INT ,DATA datetime)

declare @dt_ini datetime, @dt_fim DATETIME

set @dt_ini =  convert(varchar, year(getdate()))+'-01-01'
set @dt_fim = convert(varchar, year(getdate())+1)+'-01-01'

-- Aqui você insere todos os dias do ano
while @dt_ini < @dt_fim
begin
    INSERT INTO #TBL_SEMANAS_ANO
           ([SEMANA],[DATA])
    select datepart(wk, @dt_ini) as semana, @dt_ini as data

    set @dt_ini = dateadd(day, 1, @dt_ini)
end

-- Coloquei uma coluna de controle
ALTER TABLE #TBL_SEMANAS_ANO ADD Controle INT IDENTITY

-- Adaptei para deletar os dias que não precisa.
-- Caso os dias não estejam ok, faça as adaptações.

DECLARE @Contador INT
SET @Contador = 1

WHILE (SELECT MAX(controle) FROM #TBL_SEMANAS_ANO)<=365
BEGIN
    IF (SELECT DATEPART (w, Data) FROM #TBL_SEMANAS_ANO WHERE Controle=@Contador)<> 1 AND
       (SELECT DATEPART (w, Data) FROM #TBL_SEMANAS_ANO WHERE Controle=@Contador)<> 6
    DELETE FROM #TBL_SEMANAS_ANO WHERE Controle=@Contador
    SET @Contador = @Contador + 1

END

--SELECT * FROM #TBL_SEMANAS_ANO

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...