Cómo calcular la edad en T-SQL con años, meses y días

Resuelto Barry asked hace 16 años • 27 respuestas

¿Cuál sería la mejor manera de calcular la edad de alguien en años, meses y días en T-SQL (SQL Server 2000)?

La datedifffunción no maneja bien los límites de los años, además, separar los meses y los días será una tarea complicada. Sé que puedo hacerlo en el lado del cliente con relativa facilidad, pero me gustaría hacerlo en mi procedimiento almacenado .

Barry avatar Sep 12 '08 03:09 Barry
Aceptado

Aquí hay algo de T-SQL que le brinda la cantidad de años, meses y días desde el día especificado en @date. Tiene en cuenta el hecho de que DATEDIFF() calcula la diferencia sin considerar qué mes o día es (por lo que la diferencia de mes entre el 31/8 y el 1/9 es 1 mes) y lo maneja con una declaración de caso que disminuye el resultado donde adecuado.

DECLARE @date datetime, @tmpdate datetime, @years int, @months int, @days int
SELECT @date = '2/29/04'

SELECT @tmpdate = @date

SELECT @years = DATEDIFF(yy, @tmpdate, GETDATE()) - CASE WHEN (MONTH(@date) > MONTH(GETDATE())) OR (MONTH(@date) = MONTH(GETDATE()) AND DAY(@date) > DAY(GETDATE())) THEN 1 ELSE 0 END
SELECT @tmpdate = DATEADD(yy, @years, @tmpdate)
SELECT @months = DATEDIFF(m, @tmpdate, GETDATE()) - CASE WHEN DAY(@date) > DAY(GETDATE()) THEN 1 ELSE 0 END
SELECT @tmpdate = DATEADD(m, @months, @tmpdate)
SELECT @days = DATEDIFF(d, @tmpdate, GETDATE())

SELECT @years, @months, @days
Dane avatar Sep 11 '2008 21:09 Dane

Una forma sencilla de obtener la edad como texto es la siguiente:

Select cast((DATEDIFF(m, date_of_birth, GETDATE())/12) as varchar) + ' Y & ' + 
       cast((DATEDIFF(m, date_of_birth, GETDATE())%12) as varchar) + ' M' as Age

El formato de resultados será:

**63 Y & 2 M**
Ajit Bhgayanathan avatar Oct 06 '2013 02:10 Ajit Bhgayanathan