Calcular tempo de empresa se baseando na data de admissão e data de demissão.
Se a data de admissão estiver vazia, ele considera a data atual GETDATE().
Resultado:
--> calcular diferença entre duas datas
CASE
WHEN DATEDIFF(YEAR, DATAADMISSAO, ISNULL(DATADEMISSAO, GETDATE())) = 1
THEN CAST(DATEDIFF(YEAR, DATAADMISSAO, ISNULL(DATADEMISSAO, GETDATE())) AS VARCHAR) + ' ANO'
WHEN DATEDIFF(YEAR, DATAADMISSAO, ISNULL(DATADEMISSAO, GETDATE())) <> 0
THEN CAST(DATEDIFF(YEAR, DATAADMISSAO, ISNULL(DATADEMISSAO, GETDATE())) AS VARCHAR) + ' ANOS'
WHEN DATEDIFF(MONTH, DATAADMISSAO, ISNULL(DATADEMISSAO, GETDATE())) = 1
THEN CAST(DATEDIFF(MONTH, DATAADMISSAO, ISNULL(DATADEMISSAO, GETDATE())) AS VARCHAR) + ' MÊS'
WHEN DATEDIFF(MONTH, DATAADMISSAO, ISNULL(DATADEMISSAO, GETDATE())) = 0
THEN CAST(DATEDIFF(DAY, DATAADMISSAO, ISNULL(DATADEMISSAO, GETDATE())) AS VARCHAR) + ' DIAS'
ELSE CAST(DATEDIFF(MONTH, DATAADMISSAO, ISNULL(DATADEMISSAO, GETDATE())) AS VARCHAR) + ' MESES'
END AS TEMPO_EMPRESA
--> Calcular tempo de empresa
CASE
WHEN DATEDIFF(DAY, PFUNC.DATAADMISSAO, GETDATE()) < 30 THEN CONCAT(DATEDIFF(DAY, PFUNC.DATAADMISSAO, GETDATE()), ' D')
WHEN DATEDIFF(DAY, PFUNC.DATAADMISSAO, GETDATE()) > 360 THEN CONCAT(DATEDIFF(YEAR, PFUNC.DATAADMISSAO, GETDATE()), ' A')
WHEN DATEDIFF(DAY, PFUNC.DATAADMISSAO, GETDATE()) < 360 THEN CONCAT(DATEDIFF(MONTH, PFUNC.DATAADMISSAO, GETDATE()), ' M')
END AS 'TEMPO_EMPRESA',
CASE
WHEN DATEDIFF(DAY, PFUNC.DATAADMISSAO, GETDATE()) < 30 THEN 'Menos de 30 dias'
WHEN DATEDIFF(DAY, PFUNC.DATAADMISSAO, GETDATE()) < 365 THEN CONCAT(DATEDIFF(MONTH, PFUNC.DATAADMISSAO, GETDATE()), ' meses')
WHEN DATEDIFF(YEAR, PFUNC.DATAADMISSAO, GETDATE()) = 1 THEN '1 ano'
ELSE CONCAT(DATEDIFF(YEAR, PFUNC.DATAADMISSAO, GETDATE()), ' anos')
END AS TEMPO_EMPRESA,
--> classificar idade de acordo com os parâmetros do IBGE
CASE
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) < 20 THEN 'Menor ou igual a 19'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 20 and DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) <= 24 THEN '20 a 24 anos'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 25 and DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) <= 29 THEN '25 a 29 anos'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 30 and DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) <= 34 THEN '30 a 34 anos'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 35 and DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) <= 39 THEN '35 a 39 anos'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 40 and DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) <= 44 THEN '40 a 44 anos'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 45 and DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) <= 49 THEN '45 a 49 anos'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 50 and DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) <= 54 THEN '50 a 54 anos'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 55 and DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) <= 59 THEN '55 a 59 anos'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 60 and DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) <= 64 THEN '60 a 64 anos'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 65 and DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) <= 69 THEN '65 a 69 anos'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 70 and DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) <= 74 THEN '70 a 74 anos'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 75 and DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) <= 79 THEN '75 a 79 anos'
WHEN DATEDIFF(YEAR, PPESSOA.DTNASCIMENTO, GETDATE()) >= 80 THEN 'Maior ou igual a 80'
ELSE ' '
END AS CLASSIFICACAO_IBGE,
--> Bônus:
Classificar geração
CASE
WHEN YEAR(PPESSOA.DTNASCIMENTO) <= '1960' THEN 'BABY BOOMERS'
WHEN (YEAR(PPESSOA.DTNASCIMENTO) >= '1961' AND
YEAR(PPESSOA.DTNASCIMENTO) <= '1980') THEN 'X'
WHEN (YEAR(PPESSOA.DTNASCIMENTO) >= '1981' AND
YEAR(PPESSOA.DTNASCIMENTO) <= '1997') THEN 'Y'
WHEN (YEAR(PPESSOA.DTNASCIMENTO) >= '1998' AND
YEAR(PPESSOA.DTNASCIMENTO) <= '2009') THEN 'Z'
ELSE 'ALFA'
END AS 'GERACAO',