English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Fecha y hora SQL

En este tutorial, aprenderás a usar fechas y horas en SQL.

Manejo de fechas y horas

Además de las cadenas y los números, a menudo es necesario almacenar fechas y/o valores de tiempo, como la fecha de nacimiento del usuario, la fecha de contratación del empleado, la fecha de eventos futuros, la fecha y hora de creación o modificación de una fila específica en la tabla, etc.

Este tipo de datos se denomina datos temporales y cada motor de base de datos tiene un formato de almacenamiento predeterminado y tipo de datos para ellos. La tabla a continuación muestra los tipos de datos de fecha y hora admitidos por el servidor de base de datos MySQL.

TipoFormato predeterminadoValores permitidos
FECHAYYYY-MM-DD1000-01-01 - 9999-12-31
TIEMPOHH:MM:SS o HHH:MM:SS-838:59:59 - 838:59:59
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 - 9999-12-31 23:59:59
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:00 - 2037-12-31 23:59:59
AÑOYYYY1901 - 2155

El formato de la fecha DATE es YYYY-MM-DD, donde YYYY representa el año completo(4dígito), mientras que MM y DD representan respectivamente la parte mes y día de la fecha (números con dos ceros delante). Los valores de tiempo suelen adoptar el formato HH:MM:SS, donde HH, MM y SS representan las partes hora, minuto y segundo del tiempo.

Las siguientes instrucciones muestran cómo insertar valores de fecha en una tabla de base de datos:

INSERT INTO employees (emp_name, hire_date, salary)
VALUES ('Adam Smith', '2015-06-24' 4500);

Nota:En MySQL, el valor de la parte horaria puede ser mayor porque MySQL las considera como tiempo de ejecución. Esto significa que el tipo de datos de tiempo no solo se puede usar para representar una hora del día (debe ser menor que24horas), también se puede usar para representar el intervalo de tiempo entre dos eventos, que puede ser mayor que24horas, incluso valores negativos.

Rastrear el tiempo de creación o modificación de una fila

Al utilizar bases de datos de grandes aplicaciones, generalmente es necesario almacenar el tiempo de creación del registro o la última modificación en la base de datos, por ejemplo, almacenar la fecha y hora de registro del usuario o la última vez que el usuario actualizó la contraseña.

En MySQL, puede usar la función NOW() para insertar el timestamp actual, como se muestra a continuación:

-- Sintaxis de la base de datos MySQL
INSERT INTO users (name, birth_date, created_at)
VALUES ('Bilbo Baggins', '1998-04-16', NOW());

Pero, si no desea insertar manualmente la fecha y hora actual, simplemente use las propiedades de inicialización y actualización automáticas de los tipos de datos TIMESTAMP y DATETIME.

Para asignar propiedades automáticas, especifique las cláusulas DEFAULT CURRENT_TIMESTAMP y ON UPDATE CURRENT_TIMESTAMP en la definición de la columna, como se muestra a continuación:

-- Sintaxis de la base de datos MySQL
CREATE TABLE users (
    id INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL UNIQUE,
    birth_date DATE NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Nota:La inicialización y actualización automática de DATETIME se aplica solo en MySQL 5.6.5o versiones más recientes. Si usa una versión antigua, utilice TIMESTAMP.

Extraer una parte de la fecha o la hora

En algunos casos, solo desea obtener una parte de la fecha o la hora. En MySQL, puede usar funciones específicamente diseñadas para extraer partes de valores de tiempo, como YEAR(), MONTH(), DAYOFMONTH(), MONTHNAME(), DAYNAME(), HOUR(), MINUTE(), SECOND() y otras.

La siguiente sentencia SQL extraerá el año de los valores de la columna birth_date, por ejemplo, si cualquier usuario tiene el cumpleaños es1987-01-14entonces YEAR(birth_date) devolverá1987.

mysql> SELECT name, YEAR(birth_date) FROM users;

Del mismo modo, puede usar la función DAYOFMONTH() para obtener un día específico de cada mes, por ejemplo, si cualquier usuario tiene birth_date es1986-10-06,si DAYOFMONTH(birth_date) se devuelve6.

mysql> SELECT name, DAYOFMONTH(birth_date) FROM users;

Formatear fecha o hora

Si desea usar un formato de fecha y hora más descriptivo y legible en los resultados, puede usar las funciones DATE_FORMAT() y TIME_FORMAT() para reformatear los valores de fecha y hora existentes.

La siguiente sentencia SQL establecerá un formato más legible.usersen la tablabirth_dateFormato del valor de la columna, por ejemplo1987Año1Mes14Desde el día1987Año1Mes14Valor del día.

mysql> SELECT name, DATE_FORMAT(birth_date, '%M %e, %Y') FROM users;