none
Duvida como calcular mes e ano - tempo de casa do funcionario

    Question

  • Prezados, estou com a seguinte duvida, na Sql abaixo,que estou tentando desenvolver e para trazer tempo de casa de cada funcionario. vejam

    SELECT

     

    GFILIAL.NOMEFANTASIA,

    PFUNC

    .CHAPA,

    PFUNC

    .NOME,

    CONVERT

     

    (VARCHAR,PFUNC.DATAADMISSAO,103) AS ADMISSAO, PFUNCAO.NOME, CASE WHEN DATEPART(MONTH,PFUNC.DATAADMISSAO)< DATEPART(MONTH,GETDATE()) OR (DATEPART(DAY,PFUNC.DATAADMISSAO)>= DATEPART(DAY,GETDATE()) AND DATEPART(MONTH,PFUNC.DATAADMISSAO)<= DATEPART(MONTH,GETDATE())) THEN

    (

     

    DATEDIFF(YEAR,PFUNC.DATAADMISSAO,GETDATE()))

    ELSE

    (

     

    DATEDIFF(YEAR,PFUNC.DATAADMISSAO,GETDATE()))

    END

     

    AS TEMPODECASA

    FROM

     

    PFUNC, GFILIAL, PFUNCAO

    WHERE

     

    GFILIAL.CODFILIAL=PFUNC.CODFILIAL

    AND

     

    PFUNC.CODCOLIGADA=GFILIAL.CODCOLIGADA

    AND

     

    PFUNC.CODFUNCAO=PFUNCAO.CODIGO

    AND

     

    PFUNCAO.CODCOLIGADA=PFUNC.CODCOLIGADA

    AND

     

    PFUNC.CODSITUACAO NOT IN ('D','I')

    AND

     

    PFUNC.CODTIPO NOT IN ('A','D')

    AND

     

    PFUNC.CHAPA IN ('010216','009841')

    ORDER

     

    BY PFUNC.NOME

    Resultado

    Dt Admissao        Função                                                        Tempo de casa

    22/04/2010         OP. COMPUTADOR                                            0
    01/12/2008         ANALISTA  DESENVOLVIMENTO SISTEMAS            2

    Informacao correta

    22/04/2010         OP. COMPUTADOR                                            5 meses

    01/12/2008         ANALISTA  DESENVOLVIMENTO SISTEMAS            1 ano e 9 meses

    seriam as informaçoes corretas, porem ele nao esta trazendo.

    obrigado a todos pela ajuda.

    Thursday, September 09, 2010 8:26 PM

Answers

  • Isso me lembrou uma function de idade que temos para os pacientes:

     

    Declare @dtNascimento Datetime

    Set @dtNascimento = Convert(DateTime, '01/08/2010', 103)

    Select DateDiff(day, @dtNascimento, GetDate())/365 as Anos,
           DateDiff(Month,@dtNascimento,GetDate()) - (Case when day(GetDate()) < day(@dtNascimento) Then 1 Else 0 end) - (12 * (DateDiff(day, @dtNascimento, GetDate())/365))as Meses

     


    Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco
    • Marked as answer by Ronnie Von Friday, September 10, 2010 3:01 PM
    Thursday, September 09, 2010 9:08 PM

All replies

  • Isso me lembrou uma function de idade que temos para os pacientes:

     

    Declare @dtNascimento Datetime

    Set @dtNascimento = Convert(DateTime, '01/08/2010', 103)

    Select DateDiff(day, @dtNascimento, GetDate())/365 as Anos,
           DateDiff(Month,@dtNascimento,GetDate()) - (Case when day(GetDate()) < day(@dtNascimento) Then 1 Else 0 end) - (12 * (DateDiff(day, @dtNascimento, GetDate())/365))as Meses

     


    Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco
    • Marked as answer by Ronnie Von Friday, September 10, 2010 3:01 PM
    Thursday, September 09, 2010 9:08 PM
  • Fausto muito Obrigado, consegui acertar usando seu exemplo.

    Parabens mesmo

    Friday, September 10, 2010 3:01 PM