Cómo calcular la edad en T-SQL con años, meses y días
¿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 datediff
funció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 .
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
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**