Saltar al contenido

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

Si te encuentras con algún detalle que no entiendes puedes dejarlo en la sección de comentarios y te responderemos lo más rápido posible.

Solución:

Aquí hay algunos T-SQL que le brindan 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 maneja eso 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

Prueba esto…

SELECT CASE WHEN
 (DATEADD(year,DATEDIFF(year, @datestart  ,@dateend) , @datestart) > @dateend)
THEN DATEDIFF(year, @datestart  ,@dateend) -1
ELSE DATEDIFF(year, @datestart  ,@dateend)
END

Básicamente, “DateDiff (año…”), le da la edad que la persona cumplirá este año, por lo que solo agregué una declaración de caso para decir, si aún no ha cumplido años este año, reste 1 año, de lo contrario devolver el valor.

La forma simple 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 los resultados será:

**63 Y & 2 M**

Te mostramos reseñas y valoraciones

Si piensas que ha sido provechoso nuestro post, nos gustaría que lo compartas con el resto programadores de esta forma contrubuyes a extender nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *