El manejo correcto de la información es fundamental en cualquier base de datos, y cuando hablamos de datos sensibles y personales como la fecha de nacimiento, la precisión y el formato adecuado son aún más críticos. Almacenar y consultar fechas de nacimiento de manera eficiente no solo garantiza la integridad de los datos, sino que también facilita operaciones comunes como calcular edades, encontrar cumpleaños o filtrar registros por rangos de fechas. Aunque la pregunta inicial se centra en 'cómo escribir' la fecha, en el contexto de bases de datos, esto implica seleccionar el tipo de dato correcto y utilizar las herramientas SQL adecuadas para interactuar con esa información.

Los sistemas de gestión de bases de datos relacionales, que utilizan SQL como lenguaje estándar, ofrecen tipos de datos específicos para manejar información temporal. La elección del tipo de dato correcto es el primer paso crucial.

Tipos de Datos para Almacenar Fechas
En SQL, existen varios tipos de datos para representar fechas y horas. Para una fecha de nacimiento, donde generalmente solo necesitamos el día, mes y año sin la información de la hora, el tipo de dato más apropiado es DATE.
Otros tipos comunes incluyen:
DATETIMEoTIMESTAMP: Almacenan tanto la fecha como la hora (generalmente en formatoYYYY-MM-DD HH:MM:SS). Aunque podrías usar estos para una fecha de nacimiento, estarías almacenando información innecesaria (la hora) y podrías complicar algunas operaciones simples.TIME: Almacena solo la hora. No es relevante para fechas de nacimiento.YEAR(específico de MySQL): Almacena un año. Demasiado limitado para una fecha de nacimiento completa.
Por lo tanto, para garantizar la precisión y simplicidad, el tipo de dato DATE es la mejor elección para almacenar una fecha de nacimiento.
Almacenando Fechas de Nacimiento en una Tabla
Para almacenar una fecha de nacimiento, primero debes crear una tabla con una columna definida con el tipo de dato DATE. Aquí tienes un ejemplo básico usando la estructura de tabla proporcionada en el contexto original (aunque adaptada para un caso de uso de fecha de nacimiento):
CREATE TABLE personas (
persona_id SERIAL PRIMARY KEY,
nombre VARCHAR(100),
fecha_nacimiento DATE
);Una vez que la tabla está creada, puedes insertar registros proporcionando la fecha de nacimiento en un formato reconocido, que suele ser 'YYYY-MM-DD'. Por ejemplo:
INSERT INTO personas (nombre, fecha_nacimiento) VALUES ('Juan Pérez', '1990-05-15');
INSERT INTO personas (nombre, fecha_nacimiento) VALUES ('Maria García', '1985-11-30');
INSERT INTO personas (nombre, fecha_nacimiento) VALUES ('Carlos López', '2001-07-22');Es vital asegurarse de que el formato de la fecha que insertas sea compatible con el sistema de base de datos que estás utilizando. El formato 'YYYY-MM-DD' es el estándar ISO 8601 y es ampliamente aceptado.
Consultando y Manipulando Fechas con Funciones SQL
Una vez que las fechas están almacenadas, necesitarás interactuar con ellas. Aquí es donde entran en juego las funciones de fecha de SQL. Estas funciones te permiten obtener la fecha actual, extraer partes específicas de una fecha (como el año o el mes), sumar o restar intervalos de tiempo, o calcular la diferencia entre dos fechas. La disponibilidad y sintaxis exacta de estas funciones pueden variar ligeramente entre los diferentes sistemas de gestión de bases de datos (conocidos como 'flavors' o 'sabores' de SQL), como PostgreSQL, MySQL y SQL Server.
Obtener la Fecha y Hora Actual
Con frecuencia, necesitarás saber la fecha o la hora actual del sistema. Esto puede ser útil para registrar cuándo se añadió un registro o para compararlo con una fecha almacenada.
- PostgreSQL: Utiliza
NOW()para obtener la fecha y hora con zona horaria, ocurrent_datepara obtener solo la fecha actual. - MySQL: Utiliza
NOW()para la fecha y hora actual, yCURDATE()para solo la fecha actual. - SQL Server: Utiliza
CURRENT_TIMESTAMPpara la fecha y hora, yGETDATE()(una función similar aNOW()pero sin información de zona horaria por defecto) oCURRENT_TIMESTAMPpara la fecha y hora. Para solo la fecha, a menudo se extrae deGETDATE()oCURRENT_TIMESTAMP.
Veamos una comparación:
| Operación | PostgreSQL | MySQL | SQL Server |
|---|---|---|---|
| Fecha y Hora Actual | SELECT NOW(); | SELECT NOW(); | SELECT CURRENT_TIMESTAMP;SELECT GETDATE(); |
| Fecha Actual | SELECT current_date; | SELECT CURDATE(); | SELECT CAST(GETDATE() AS DATE);SELECT CAST(CURRENT_TIMESTAMP AS DATE); |
Extraer Partes de una Fecha
Una tarea muy común es extraer componentes específicos de una fecha de nacimiento, como el año de nacimiento para calcular la edad, el mes y el día para encontrar cumpleaños, o el día de la semana. SQL proporciona funciones para esto.

- PostgreSQL: Usa la función
EXTRACT(unit FROM date_column)oDATE_PART('unit', date_column). La unidad puede serYEAR,MONTH,DAY,DOW(día de la semana),QUARTER, etc. - MySQL: Usa
EXTRACT(unit FROM date_column). Funciona de manera similar a PostgreSQL. - SQL Server: Usa la función
DATEPART(unit, date_column). La sintaxis es ligeramente diferente, con la unidad como primer argumento y sin comillas.
Ejemplo: Extraer el año de nacimiento:
-- PostgreSQL
SELECT nombre, EXTRACT(YEAR FROM fecha_nacimiento) AS AnioNacimiento FROM personas;
SELECT nombre, DATE_PART('year', fecha_nacimiento) AS AnioNacimiento FROM personas;
-- MySQL
SELECT nombre, EXTRACT(YEAR FROM fecha_nacimiento) AS AnioNacimiento FROM personas;
-- SQL Server
SELECT nombre, DATEPART(year, fecha_nacimiento) AS AnioNacimiento FROM personas;Esta funcionalidad es clave para tareas como calcular la edad aproximada (Año Actual - Año de Nacimiento) o agrupar personas por año de nacimiento.
| Operación | PostgreSQL | MySQL | SQL Server |
|---|---|---|---|
| Extraer Parte (Ej: Año) | EXTRACT(YEAR FROM fecha)DATE_PART('year', fecha) | EXTRACT(YEAR FROM fecha) | DATEPART(year, fecha) |
| Unidades Comunes | YEAR, MONTH, DAY, QUARTER, WEEK, etc. | ||
Sumar y Restar Intervalos de Tiempo
A veces, necesitas calcular una fecha futura o pasada basada en una fecha existente. Por ejemplo, podrías querer saber la fecha en que alguien cumplirá 18 años.
- PostgreSQL: Permite usar aritmética con fechas y el tipo
INTERVAL. Por ejemplo:fecha + INTERVAL '1 year'ofecha - INTERVAL '3 days'. - MySQL: Usa las funciones
DATE_ADD(date, INTERVAL value unit)yDATE_SUB(date, INTERVAL value unit). - SQL Server: Usa la función
DATEADD(unit, value, date). Para restar, se usa un valor negativo.
Ejemplo: Calcular la fecha 18 años después de la fecha de nacimiento:
-- PostgreSQL
SELECT nombre, fecha_nacimiento + INTERVAL '18 years' AS Fecha18Cumpleanios FROM personas;
-- MySQL
SELECT nombre, DATE_ADD(fecha_nacimiento, INTERVAL 18 YEAR) AS Fecha18Cumpleanios FROM personas;
-- SQL Server
SELECT nombre, DATEADD(year, 18, fecha_nacimiento) AS Fecha18Cumpleanios FROM personas;Esta capacidad de manipular fechas por intervalos es muy potente para calcular plazos, vencimientos o fechas clave basadas en la fecha de nacimiento u otra fecha de referencia.
| Operación | PostgreSQL | MySQL | SQL Server |
|---|---|---|---|
| Sumar Intervalo | fecha + INTERVAL 'valor unidad' | DATE_ADD(fecha, INTERVAL valor unidad) | DATEADD(unidad, valor, fecha) |
| Restar Intervalo | fecha - INTERVAL 'valor unidad' | DATE_SUB(fecha, INTERVAL valor unidad) | DATEADD(unidad, -valor, fecha) |
| Unidades | DAY, MONTH, YEAR, HOUR, MINUTE, SECOND, etc. | ||
Calcular Diferencias entre Fechas
Calcular la diferencia entre dos fechas es esencial para determinar la edad exacta de una persona, el tiempo transcurrido desde un evento, o la duración entre dos puntos en el tiempo. La unidad de la diferencia (días, meses, años) a menudo se especifica.
- PostgreSQL: Puedes restar directamente dos fechas de tipo
DATEpara obtener la diferencia en días. Para otras unidades o una diferencia más precisa en años/meses, puedes usar funciones comoAGE(timestamp, timestamp)o combinaciones deEXTRACT. Restarfecha2 - fecha1te da el número de días. - MySQL: Usa la función
DATEDIFF(date2, date1)para obtener la diferencia en días (date2 - date1). Para otras unidades, puedes usarTIMESTAMPDIFF(unit, timestamp1, timestamp2). - SQL Server: Usa la función
DATEDIFF(unit, startdate, enddate). Puedes especificar la unidad (day,month,year, etc.) para obtener la diferencia en esa unidad.
Ejemplo: Calcular la edad en años (aproximada o exacta dependiendo de la función y el flavor):
-- PostgreSQL (Edad aproximada en años)
SELECT nombre, EXTRACT(YEAR FROM AGE(current_date, fecha_nacimiento)) AS EdadAnios FROM personas;
-- PostgreSQL (Diferencia en días)
SELECT '2023-01-01'::date - '2022-12-01'::date AS DiferenciaDias;
-- MySQL (Diferencia en días)
SELECT nombre, DATEDIFF(CURDATE(), fecha_nacimiento) AS DiasVividos FROM personas;
-- MySQL (Diferencia en años - más precisa)
SELECT nombre, TIMESTAMPDIFF(YEAR, fecha_nacimiento, CURDATE()) AS EdadAnios FROM personas;
-- SQL Server (Diferencia en años)
SELECT nombre, DATEDIFF(year, fecha_nacimiento, GETDATE()) AS EdadAnios FROM personas;Calcular la edad exacta es un poco más complejo ya que requiere considerar si el cumpleaños ya pasó en el año actual, pero las funciones de diferencia de fecha proporcionan la base para realizar estos cálculos.
| Operación | PostgreSQL | MySQL | SQL Server |
|---|---|---|---|
| Diferencia en Días | fecha2 - fecha1 | DATEDIFF(fecha2, fecha1) | DATEDIFF(day, fecha1, fecha2) |
| Diferencia en Otras Unidades (Ej: Años) | EXTRACT(YEAR FROM AGE(fecha2, fecha1)) | TIMESTAMPDIFF(unit, fecha1, fecha2) | DATEDIFF(unit, fecha1, fecha2) |
Preguntas Frecuentes (FAQ)
- ¿Cuál es el mejor tipo de dato para una fecha de nacimiento?
- Generalmente, el tipo de dato
DATEes el más adecuado, ya que almacena solo la fecha (año, mes, día) sin la información de la hora, lo cual es suficiente y preciso para una fecha de nacimiento. - ¿Puedo almacenar fechas en formatos diferentes a YYYY-MM-DD?
- Aunque algunos sistemas de bases de datos pueden ser configurados para aceptar otros formatos, el estándar
YYYY-MM-DDes el más seguro y portable. Es la forma recomendada de insertar y trabajar con fechas en SQL. - ¿Cómo calculo la edad de una persona a partir de su fecha de nacimiento?
- Puedes calcular la edad aproximada restando el año de nacimiento al año actual usando funciones como
EXTRACT(YEAR FROM fecha)oDATEPART(year, fecha). Para una edad más precisa, necesitas calcular la diferencia de años y ajustar si el mes y día actual es anterior al mes y día del cumpleaños, usando funciones de diferencia de fecha comoDATEDIFFoTIMESTAMPDIFF, o lógica condicional. - ¿Las funciones de fecha son iguales en todos los sistemas de bases de datos?
- No, como hemos visto, la sintaxis y los nombres de las funciones varían entre sistemas como PostgreSQL, MySQL y SQL Server. Es importante consultar la documentación específica del sistema que estás utilizando.
Conclusión
Almacenar y gestionar fechas de nacimiento en una base de datos SQL comienza con la elección del tipo de dato correcto, siendo DATE la opción preferida. Una vez almacenadas, las bases de datos relacionales ofrecen un conjunto robusto de funciones SQL para consultar, manipular y calcular información basada en estas fechas. Dominar funciones como NOW(), CURRENT_DATE, EXTRACT(), DATE_PART(), DATEPART(), DATE_ADD(), DATE_SUB(), DATEADD(), DATEDIFF() y TIMESTAMPDIFF() te permitirá trabajar eficazmente con datos temporales, realizar cálculos importantes como la edad y asegurar la precisión de la información personal en tus bases de datos. Aunque la sintaxis varía entre diferentes "sabores" de SQL, los conceptos detrás de estas operaciones son universales y fundamentales para cualquier desarrollador o administrador de bases de datos.
Si quieres conocer otros artículos parecidos a Fechas de Nacimiento en Bases de Datos SQL puedes visitar la categoría Bases de datos.

Aprende mas sobre MySQL