none
WHERE para descobrir o ano atual de uma data RRS feed

  • Pergunta

  • Olá pessoal, 

    Preciso de uma ajuda de vocês com relação a uma dúvida do SQL Server 2008.

    Tenho a seguinte query:

    SELECT

    PROJ_NAME,
    ProjectOwnerName,
    YEAR(ProjectFinishDate),

    FROM ProjectServer_Published.dbo.MSP_PROJECTS,ProjectServer_Reporting.dbo.MSP_EpmProject_UserView 

    Gostaria de extrair da coluna ProjectFinishDate os projetos do ano atual - "2014".

    É possível fazer essa ação utilizando apenas este campo? Se houver uma forma mais prática e puderem compartilhar também agradeço.

    Obrigado. 


    Obrigado por contactar o fórum Microsoft Technet!

    quarta-feira, 12 de novembro de 2014 11:06

Respostas

  • Deleted
    quarta-feira, 12 de novembro de 2014 13:06
  • Meu amigo,

    Não sei se entendi o problema, mas você pode apenas adicionar a condiçao na cláusula WHERE. 

    Segue abaixo um exemplo para você adaptar à sua necessidade:

    SELECT
      PROJ_NAME,
      ProjectOwnerName,
      YEAR(ProjectFinishDate)
    
    FROM   ProjectServer_Published.dbo.MSP_PROJECTS,ProjectServer_Reporting.dbo.MSP_EpmProject_UserView
    
    WHERE YEAR(ProjectFinishDate) = 2014
    GO


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quarta-feira, 12 de novembro de 2014 11:14
    Moderador

  • -- Adicione a clausula WHRE no seu SELECT
    WHERE YEAR(ProjectFinisdDate) = YEAR(GETDATE())
    
    -- Se for algo mais "Avançado" para seu select, faça uma CTE
    -- Como vi que no seu select contém mais de uma tabela, utilize uma CTE
    ;WITH CTE_TMP (PROJ_NAME, ProjectFinishDate)
    AS
    -- Define the CTE query.
    (SELECT PROJ_NAME
    ,ProjectFinishDate
    FROM ProjectServer_Published.dbo.MSP_PROJECTS
    WHERE YEAR(ProjectFinisdDate) = YEAR(GETDATE())
    )
    SELECT PROJ_NAME,
    ProjectOwnerName,
    YEAR(ProjectFinishDate),
    FROM CTE_TMP,ProjectServer_Reporting.dbo.MSP_EpmProject_UserView


    **************************************************************************************

    Sempre lembre de marcar a resposta se ela foi útil.

    Tks.


    quarta-feira, 12 de novembro de 2014 11:18
  • Durval e Demetrius obrigado pela resposta.

    Ainda não consegui realizar a operação para identificar o anual com base na data daquele campo.

    Tentei as seguintes situações:

    YEAR(EPM2010_Reporting.dbo.MSP_EpmProject_UserView.ProjectFinishDate) = YEAR(GETDATE()) 

    YEAR(EPM2010_Reporting.dbo.MSP_EpmProject_UserView.ProjectFinishDate) = 2014

    YEAR(ProjectFinishDate) = year(current_timestamp)

    Existe outra forma?

    Obrigado pela ajuda.


    Obrigado por contactar o fórum Microsoft Technet!

    Meu amigo,

    Será que esta coluna é do tipo "date" ou "datetime"?

    Faça um teste convertendo a coluna, segue um exemplo abaixo:

    YEAR(CONVERT(date,EPM2010_Reporting.dbo.MSP_EpmProject_UserView.ProjectFinishDate)) = YEAR(GETDATE()) 


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quarta-feira, 12 de novembro de 2014 12:11
    Moderador
  • Hezequias,

    Então não é necessário converter.

    Vamos investigar o que pode estar ocorrendo.

    Execute este T-SQL abaixo e veja os anos que aparecem com estas condições de pesquisa:

    SELECT
    
      DISTINCT YEAR(ProjectFinishDate)
    
    FROM ProjectServer2010_Published.dbo.MSP_PROJECTS, ProjectServer2010_Reporting.dbo.MSP_EpmProject_UserView 
    
    WHERE 
    MSP_PROJECTS.PROJ_UID = ProjectServer2010_Reporting.dbo.MSP_EpmProject_UserView.ProjectUID AND
    ([Situacao] = 'Encerrado' OR ProjectPercentCompleted = 100) AND 
    [Tipo]='Project' AND
    [Pesquisa]='Sim'
    GO
    
    

    Se não aparecer o ano de 2014, reveja às condições em negrito. A idéia é verificar se alguma destas condições, por algum motivo, eliminam o ano de 2014 e deste modo você não obtém o resultado esperado.

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quarta-feira, 12 de novembro de 2014 12:38
    Moderador
  • Zeca Lima, não vejo a necessidade de conversão pois a função YEAR retorna um valor inteiro da data, mesmo que o campo seja datetime ele irá extrair somente o ano da data correspondente.

    SELECT BusinessEntityID ,
           RateChangeDate ,
           Rate ,
           PayFrequency ,
           ModifiedDate 
    FROM HumanResources.EmployeePayHistory (NOLOCK) WHERE YEAR(RateChangeDate) = 2003

    no meu carro aqui retornou normalmente os valores

    quarta-feira, 12 de novembro de 2014 12:51
  • Qual o tipo do campo ProjectFinishDate ?  Nos passe seu select para que possamos auxiliar melhor.

    quarta-feira, 12 de novembro de 2014 12:11

Todas as Respostas

  • Meu amigo,

    Não sei se entendi o problema, mas você pode apenas adicionar a condiçao na cláusula WHERE. 

    Segue abaixo um exemplo para você adaptar à sua necessidade:

    SELECT
      PROJ_NAME,
      ProjectOwnerName,
      YEAR(ProjectFinishDate)
    
    FROM   ProjectServer_Published.dbo.MSP_PROJECTS,ProjectServer_Reporting.dbo.MSP_EpmProject_UserView
    
    WHERE YEAR(ProjectFinishDate) = 2014
    GO


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quarta-feira, 12 de novembro de 2014 11:14
    Moderador

  • -- Adicione a clausula WHRE no seu SELECT
    WHERE YEAR(ProjectFinisdDate) = YEAR(GETDATE())
    
    -- Se for algo mais "Avançado" para seu select, faça uma CTE
    -- Como vi que no seu select contém mais de uma tabela, utilize uma CTE
    ;WITH CTE_TMP (PROJ_NAME, ProjectFinishDate)
    AS
    -- Define the CTE query.
    (SELECT PROJ_NAME
    ,ProjectFinishDate
    FROM ProjectServer_Published.dbo.MSP_PROJECTS
    WHERE YEAR(ProjectFinisdDate) = YEAR(GETDATE())
    )
    SELECT PROJ_NAME,
    ProjectOwnerName,
    YEAR(ProjectFinishDate),
    FROM CTE_TMP,ProjectServer_Reporting.dbo.MSP_EpmProject_UserView


    **************************************************************************************

    Sempre lembre de marcar a resposta se ela foi útil.

    Tks.


    quarta-feira, 12 de novembro de 2014 11:18
  • Durval e Demetrius obrigado pela resposta.

    Ainda não consegui realizar a operação para identificar o anual com base na data daquele campo.

    Tentei as seguintes situações:

    YEAR(EPM2010_Reporting.dbo.MSP_EpmProject_UserView.ProjectFinishDate) = YEAR(GETDATE()) 

    YEAR(EPM2010_Reporting.dbo.MSP_EpmProject_UserView.ProjectFinishDate) = 2014

    YEAR(ProjectFinishDate) = year(current_timestamp)

    Existe outra forma?

    Obrigado pela ajuda.


    Obrigado por contactar o fórum Microsoft Technet!

    quarta-feira, 12 de novembro de 2014 12:07
  • Qual o tipo do campo ProjectFinishDate ?  Nos passe seu select para que possamos auxiliar melhor.

    quarta-feira, 12 de novembro de 2014 12:11
  • Durval e Demetrius obrigado pela resposta.

    Ainda não consegui realizar a operação para identificar o anual com base na data daquele campo.

    Tentei as seguintes situações:

    YEAR(EPM2010_Reporting.dbo.MSP_EpmProject_UserView.ProjectFinishDate) = YEAR(GETDATE()) 

    YEAR(EPM2010_Reporting.dbo.MSP_EpmProject_UserView.ProjectFinishDate) = 2014

    YEAR(ProjectFinishDate) = year(current_timestamp)

    Existe outra forma?

    Obrigado pela ajuda.


    Obrigado por contactar o fórum Microsoft Technet!

    Meu amigo,

    Será que esta coluna é do tipo "date" ou "datetime"?

    Faça um teste convertendo a coluna, segue um exemplo abaixo:

    YEAR(CONVERT(date,EPM2010_Reporting.dbo.MSP_EpmProject_UserView.ProjectFinishDate)) = YEAR(GETDATE()) 


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quarta-feira, 12 de novembro de 2014 12:11
    Moderador
  • Demetrius,

    O select completo utilizado foi esse:

    SELECT

    PROJ_NAME,
    ProjectOwnerName,
    YEAR(ProjectFinishDate),
    year(current_timestamp),
    YEAR(ProjectFinishDate) - year(current_timestamp) 

    FROM ProjectServer2010_Published.dbo.MSP_PROJECTS, ProjectServer2010_Reporting.dbo.MSP_EpmProject_UserView 

    WHERE 
    MSP_PROJECTS.PROJ_UID = ProjectServer2010_Reporting.dbo.MSP_EpmProject_UserView.ProjectUID AND
    [Situacao] = 'Encerrado' OR ProjectPercentCompleted = 100 AND 
    [Tipo]='Project' AND
    [Pesquisa]='Sim' AND
    YEAR(CONVERT(date,ProjectServer2010_Reporting.dbo.MSP_EpmProject_UserView.ProjectFinishDate)) = YEAR(GETDATE()) 

    Obrigado.


    Obrigado por contactar o fórum Microsoft Technet!

    quarta-feira, 12 de novembro de 2014 12:21
  • Olá Durval, 

    Obrigado mais uma vez pela ajuda.

    A coluna já é do tipo DateTime.

    Exemplo:

    Obrigado.


    Obrigado por contactar o fórum Microsoft Technet!

    quarta-feira, 12 de novembro de 2014 12:23
  • Hezequias,

    Então não é necessário converter.

    Vamos investigar o que pode estar ocorrendo.

    Execute este T-SQL abaixo e veja os anos que aparecem com estas condições de pesquisa:

    SELECT
    
      DISTINCT YEAR(ProjectFinishDate)
    
    FROM ProjectServer2010_Published.dbo.MSP_PROJECTS, ProjectServer2010_Reporting.dbo.MSP_EpmProject_UserView 
    
    WHERE 
    MSP_PROJECTS.PROJ_UID = ProjectServer2010_Reporting.dbo.MSP_EpmProject_UserView.ProjectUID AND
    ([Situacao] = 'Encerrado' OR ProjectPercentCompleted = 100) AND 
    [Tipo]='Project' AND
    [Pesquisa]='Sim'
    GO
    
    

    Se não aparecer o ano de 2014, reveja às condições em negrito. A idéia é verificar se alguma destas condições, por algum motivo, eliminam o ano de 2014 e deste modo você não obtém o resultado esperado.

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quarta-feira, 12 de novembro de 2014 12:38
    Moderador
  • Zeca Lima, não vejo a necessidade de conversão pois a função YEAR retorna um valor inteiro da data, mesmo que o campo seja datetime ele irá extrair somente o ano da data correspondente.

    SELECT BusinessEntityID ,
           RateChangeDate ,
           Rate ,
           PayFrequency ,
           ModifiedDate 
    FROM HumanResources.EmployeePayHistory (NOLOCK) WHERE YEAR(RateChangeDate) = 2003

    no meu carro aqui retornou normalmente os valores

    quarta-feira, 12 de novembro de 2014 12:51
  • Deleted
    quarta-feira, 12 de novembro de 2014 13:06
  • José, Durval e Demetrius muito obrigado. 

    Problema resolvido.



    Obrigado por contactar o fórum Microsoft Technet!

    quarta-feira, 12 de novembro de 2014 13:38