Se quiseres por ANO, MESES e DIAS:
Basta alterar @niver = pela tabela correspondente.
Precisei dessa informação nos relatórios de Laudo do Raio-X(RM Saúde).
Segue informação valiosa a respeito do cálculo de datas:
http://www.mail-arch...r/msg33626.html
Validei conforme os problemas propostos no link acima.
========================================================================+
-- Wederson Rodrigues dos Reis
**** Email retirado do POST / Autorizado apenas para Equipe interna do Fórum RM ****
** Vide Regras **
DECLARE @NIVER DATETIME
DECLARE @ATUAL DATETIME
DECLARE @DATATEMP1 DATETIME
DECLARE @DATATEMP2 DATETIME
DECLARE @ANOS INT
DECLARE @MESES INT
DECLARE @DIAS INT
SELECT @NIVER = DATANASC FROM SZPACIENTE WHERE CODPACIENTE =:ESPELHO#1
SELECT @ATUAL = GETDATE()
SELECT @ANOS = (YEAR(@ATUAL) - YEAR(@NIVER)) -
CASE
WHEN (MONTH(@ATUAL) < MONTH(@NIVER)) THEN 1
ELSE
CASE
WHEN ((MONTH(@ATUAL) = MONTH(@NIVER)) AND (DAY(@ATUAL) < DAY (@NIVER))) THEN 1
ELSE
CASE
WHEN (DAY(@ATUAL) = DAY(@NIVER)) THEN 0
ELSE 0
END
END
END
SELECT @DATATEMP1 = DATEADD(YY, @ANOS, @NIVER)
SELECT @MESES = DATEDIFF(M, @DATATEMP1, @ATUAL) -
CASE
WHEN MONTH(@DATATEMP1) = MONTH(@ATUAL) AND DAY(@ATUAL) < DAY(@NIVER) THEN 1
ELSE
CASE
WHEN MONTH(@DATATEMP1) < MONTH(@ATUAL) AND DAY(@ATUAL) < DAY(@NIVER) THEN 1
ELSE
CASE
WHEN DAY(@ATUAL) < DAY(@NIVER) THEN 1
ELSE 0
END
END
END
SELECT @DATATEMP2 = DATEADD(M, @MESES, @DATATEMP1)
SELECT @DIAS = DATEDIFF(D, @DATATEMP2, @ATUAL)
SELECT @ANOS AS ANOS, @MESES AS MESES, @DIAS DIA