Volver al Blog
4 min read

Cómo calcular la edad en SQL (PostgreSQL, MySQL, SQL Server)

Aprenda patrones SQL prácticos para calcular la edad a partir de una fecha de nacimiento: años cumplidos, años y meses exactos y edad a partir de una fecha específica. Incluye ejemplos para PostgreSQL, MySQL y SQL Server.

Cómo calcular la edad en SQL (PostgreSQL, MySQL, SQL Server)

¿Necesitas calcular la edad en SQL a partir de una fecha de nacimiento? Esta guía muestra consultas prácticas listas para copiar para bases de datos comunes. Aprenderás a calcular:

  • Edad en años (años cumplidos)
  • Edad a partir de una fecha específica (no solo hoy)
  • Un resultado de estilo exacto (años y meses) cuando necesitas más detalles

1) Decide qué significa "edad" para tu caso de uso

La mayoría de la lógica empresarial utiliza años completados. Eso significa que alguien nacido el 10 de junio de 2000 cumplirá 25 años el 10 de junio de 2026, no antes. Tenga cuidado con la resta de años simple como AÑO(hoy) - AÑO(dob), porque está mal antes del cumpleaños.

2) PostgreSQL: antigüedad en años (años completados)

PostgreSQL tiene una función age() incorporada que devuelve un intervalo. Extraiga años completos como este:

SELECCIONAR EXTRACTO(AÑO DE edad(CURRENT_DATE, fecha de nacimiento)) AS edad_años
DE personas;

PostgreSQL: antigüedad a partir de una fecha específica

SELECCIONAR EXTRACTO(AÑO DE edad(FECHA '2026-02-23', fecha de nacimiento)) AS edad_años
DE personas;

3) MySQL: antigüedad en años (años completados)

En MySQL, use TIMESTAMPDIFF:

SELECT TIMESTAMPDIFF(AÑO, fecha de nacimiento, FECHA ACTUAL()) AS edad_años
DE personas;

MySQL: antigüedad a partir de una fecha específica

SELECT TIMESTAMPDIFF(AÑO, fecha de nacimiento, FECHA('2026-02-23')) AS edad_años
DE personas;

4) SQL Server: antigüedad en años (años completados)

Un patrón común en SQL Server es DATEDIFF menos un cheque de cumpleaños:

SELECCIONAR
  DATEDIFF(AÑO, fecha de nacimiento, CAST(GETDATE() COMO fecha))
  - CASO
      CUANDO DATEADD(AÑO, DATEDIFF(AÑO, fecha de nacimiento, CAST(GETDATE() COMO fecha)), fecha de nacimiento) > CAST(GETDATE() COMO fecha)
      ENTONCES 1 MÁS 0
    FINALIZAR COMO edad_años
DE personas;

SQL Server: antigüedad a partir de una fecha específica

DECLARAR @as_of date = '2026-02-23';
SELECCIONAR
  DATEDIFF(AÑO, fecha de nacimiento, @as_of)
  - CASO
      CUANDO FECHAADD(AÑO, FECHADIFF(AÑO, fecha de nacimiento, @como_de), fecha de nacimiento) > @como_de
      ENTONCES 1 MÁS 0
    FINALIZAR COMO edad_años
DE personas;

5) Ejemplo de edad exacta (años y meses)

Si desea una presentación "exacta" como "31 años 4 meses", calcule primero los años y luego los meses después del último cumpleaños. Aquí hay un ejemplo de PostgreSQL:

CON base AS (
  SELECCIONE fecha de nacimiento, FECHA_ACTUAL COMO como_de
  DE personas
)
SELECCIONAR
  EXTRAER(AÑO DE edad(a partir de, fecha de nacimiento)) COMO años,
  EXTRAER (MES DE edad (a partir de, fecha de nacimiento)) COMO meses
DESDE la base;

Errores comunes

  • Zonas horarias: almacena la fecha de nacimiento como una fecha cuando sea posible. Las fechas y horas pueden cambiar entre zonas.
  • Cumpleaños en días bisiestos: define lo que sucede en los años no bisiestos. La mayoría de los sistemas tratan los cumpleaños del 29 de febrero de 2004 como el 28 de febrero o el 1 de marzo, según la política.
  • DOB nulo o futuro: filtro o guardia, en caso contrariosu consulta devolverá valores nulos o negativos.

Comprobación rápida de cordura

Si deseas verificar una sola fecha de nacimiento rápidamente, puedes usar la calculadora en línea: Calcular edad en línea.

Guías relacionadas

Preguntas frecuentes

¿Por qué AÑO(hoy) menos AÑO(fecha de nacimiento) es incorrecto?

Ignora si el cumpleaños ya ocurrió este año, por lo que exagera la edad antes del cumpleaños.

¿Cuál es el tipo SQL más seguro para la fecha de nacimiento?

Utiliza una columna de fecha (no fecha y hora) para fecha de nacimiento si solo te importa el día calendario.