none
Criar períodos na tabela RRS feed

  • Pergunta

  • A tabela possui uma coluna data, tenho mais três colunas adjacentes: Semana / Quinzena / Trimestre.

    Como fazer para que, á partir da coluna data, seja identificado o range de datas e populado nas colunas Semana, Quinzena ou trimestre, nas respectivas colunas?

    Meu conhecimento é o básicão, não sei nem por onde começar.

    Grato,

    Raimundo

    terça-feira, 11 de setembro de 2012 21:59

Respostas

  • Boa noite Weivisson, tente o select abaixo, só substituindo o getdate() pela sua coluna de data, utilizei funções proprias do SQL server como o datepart que conseguem capturar periodos de data como semana, mes, dias...

    		select
    		GETDATE(), -- data
    		datepart(WW,GETDATE()),-- semana do ano
    		quinzena =  case when DATEPART(Day,getdate()) <= 15 then 1 else 0 end, -- quinzena do mes primeira ou segunda
    		trimestre = case when DATEPART(MONTH,getdate()) between 1 and 3 then 'trimestre 1'
    						 when DATEPART(MONTH,getdate()) between 4 and 6 then 'trimestre 2'
    						 when DATEPART(MONTH,getdate()) between 7 and 9 then 'trimestre 3'
    						 when DATEPART(MONTH,getdate()) between 10 and 12 then 'trimestre 4' end


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Sugerido como Resposta Alexandre Matayosi terça-feira, 11 de setembro de 2012 22:10
    • Marcado como Resposta Weivisson quarta-feira, 12 de setembro de 2012 20:22
    terça-feira, 11 de setembro de 2012 22:10
  • Não. Se for isso mesmo que você quer, troque este Select por um Update.

    Mas rode o Select primeiro para se certificar de que está tudo certo. De que são essas informações que você quer.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.


    quarta-feira, 12 de setembro de 2012 12:23
    Moderador
  • Amigos resolvi dessa forma, adaptando para as demais sugestões do nosso amigo Alexandre:

    UPDATE

    dbo.tbl

    SET

    test_date_quinzena = case when DATEPART(Day,test_date) <= 15 then 1 else 0 end

    • Marcado como Resposta Weivisson quarta-feira, 12 de setembro de 2012 20:21
    quarta-feira, 12 de setembro de 2012 20:21

Todas as Respostas

  • Boa noite Weivisson, tente o select abaixo, só substituindo o getdate() pela sua coluna de data, utilizei funções proprias do SQL server como o datepart que conseguem capturar periodos de data como semana, mes, dias...

    		select
    		GETDATE(), -- data
    		datepart(WW,GETDATE()),-- semana do ano
    		quinzena =  case when DATEPART(Day,getdate()) <= 15 then 1 else 0 end, -- quinzena do mes primeira ou segunda
    		trimestre = case when DATEPART(MONTH,getdate()) between 1 and 3 then 'trimestre 1'
    						 when DATEPART(MONTH,getdate()) between 4 and 6 then 'trimestre 2'
    						 when DATEPART(MONTH,getdate()) between 7 and 9 then 'trimestre 3'
    						 when DATEPART(MONTH,getdate()) between 10 and 12 then 'trimestre 4' end


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Sugerido como Resposta Alexandre Matayosi terça-feira, 11 de setembro de 2012 22:10
    • Marcado como Resposta Weivisson quarta-feira, 12 de setembro de 2012 20:22
    terça-feira, 11 de setembro de 2012 22:10
  • Prezado e competente amigo, usando esse select ele já vai gravar as informações na tabela?

    Abs.,

    Weivisson

    quarta-feira, 12 de setembro de 2012 09:15
  • Não. Se for isso mesmo que você quer, troque este Select por um Update.

    Mas rode o Select primeiro para se certificar de que está tudo certo. De que são essas informações que você quer.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.


    quarta-feira, 12 de setembro de 2012 12:23
    Moderador
  •     Bom dia weivisson, este select só irá te mostrar os resultados, para gravar em uma tabela voce teria que fazer um insert ou para atualizar um update.


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 12 de setembro de 2012 12:39
  • Amigos, tenho pesquisado e testado variações para a query acima e não estou clnkseguindo encaixaro seguinte para as linhas de quinzena e trimestre:

    se faço assim retorna valor ok:

    select

    DATEPART(Day,test_date) from dbo.table

    senão retorna:

    Invalid column name 'test_date'.

    Então não consigo aplicar o select acima para as linhjas de quinzena e trimestre:

    quinzena =  case when DATEPART(Day,getdate()) <= 15 then 1 else 0 end

    quinzena =  case when select DATEPART(Day,getdate()) from dbo.table <= 15 then 1 else 0 end

    quarta-feira, 12 de setembro de 2012 19:28
  • Weivisson, voce pode postar todo o seu select para podermos analisar o todo ?


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 12 de setembro de 2012 19:33
  • Amigos resolvi dessa forma, adaptando para as demais sugestões do nosso amigo Alexandre:

    UPDATE

    dbo.tbl

    SET

    test_date_quinzena = case when DATEPART(Day,test_date) <= 15 then 1 else 0 end

    • Marcado como Resposta Weivisson quarta-feira, 12 de setembro de 2012 20:21
    quarta-feira, 12 de setembro de 2012 20:21