En MySQL, puede usar EXTRACT()
función para extraer partes de una fecha. Por ejemplo, puede extraer la parte del año, la parte del mes o la parte del día, etc. También puede extraer partes del componente de tiempo, como minutos, segundos, microsegundos, etc.
Este artículo contiene ejemplos para demostrar.
Sintaxis
La sintaxis es así:
EXTRACT(unit FROM date)
Donde unit
es la parte de la fecha que desea extraer y date
es el valor de fecha para extraer esa parte.
Consulte la tabla al final de este artículo para obtener una lista de especificadores de unidades válidos.
Ejemplo 1
Aquí hay un ejemplo para demostrar el uso básico de la función.
SELECT EXTRACT(YEAR FROM '2019-01-01') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | 2019 | +--------+
Ejemplo 2:más partes de fechas
Aquí extraigo las distintas partes de una fecha.
SET @date = '2019-10-03'; SELECT EXTRACT(DAY FROM @date) AS 'Day', EXTRACT(MONTH FROM @date) AS 'Month', EXTRACT(YEAR FROM @date) AS 'Year';
Resultado:
+------+-------+------+ | Day | Month | Year | +------+-------+------+ | 3 | 10 | 2019 | +------+-------+------+
Ejemplo 3:extracción de partes de tiempo
Aquí extraigo varias partes de tiempo de una fecha.
SET @date = '2019-10-03 12:35:05.123456'; SELECT EXTRACT(HOUR FROM @date) AS 'Hours', EXTRACT(MINUTE FROM @date) AS 'Minutes', EXTRACT(SECOND FROM @date) AS 'Seconds', EXTRACT(MICROSECOND FROM @date) AS 'Microseconds';
Resultado:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 12 | 35 | 5 | 123456 | +-------+---------+---------+--------------+
Ejemplo 4:combinación de especificadores de unidades
También puede combinar especificadores de unidades, como este:
SET @date = '2019-10-03 12:35:05.123456'; SELECT EXTRACT(HOUR_MICROSECOND FROM @date) AS 'Result';
Resultado:
+--------------+ | Result | +--------------+ | 123505123456 | +--------------+
Este ejemplo devuelve todo, desde la parte de las horas hasta la parte de los microsegundos.
Un ejemplo de base de datos
Aquí hay un ejemplo de cómo extraer el año y el mes de una columna en una base de datos:
USE sakila; SELECT payment_date AS 'Date/Time', EXTRACT(YEAR_MONTH FROM payment_date) AS 'Year/Month' FROM payment WHERE payment_id = 1;
Resultado:
+---------------------+------------+ | Date/Time | Year/Month | +---------------------+------------+ | 2005-05-25 11:30:37 | 200505 | +---------------------+------------+
Fecha/hora actual
Aquí, extraigo la parte del mes de una fecha generada con CURDATE()
función.
SELECT CURDATE(), EXTRACT(MONTH FROM CURDATE());
Resultado:
+------------+-------------------------------+ | CURDATE() | EXTRACT(MONTH FROM CURDATE()) | +------------+-------------------------------+ | 2018-06-26 | 6 | +------------+-------------------------------+
En este ejemplo, extraigo la parte de la hora de la fecha y hora actual (que se genera con NOW()
función).
SELECT NOW(), EXTRACT(HOUR FROM NOW());
Resultado:
+---------------------+--------------------------+ | NOW() | EXTRACT(HOUR FROM NOW()) | +---------------------+--------------------------+ | 2018-06-26 09:01:46 | 9 | +---------------------+--------------------------+
Valores esperados
La siguiente tabla muestra los valores unitarios válidos y su formato esperado.
unit Valor | Esperado expr Formato |
---|---|
MICROSEGUNDO | MICROSEGUNDOS |
SEGUNDO | SEGUNDOS |
MINUTO | MINUTOS |
HORA | HORAS |
DÍA | DÍAS |
SEMANA | SEMANAS |
MES | MESES |
TRIMESTRE | TRIMESTRE |
AÑO | AÑOS |
SEGUNDO_MICROSEGUNDO | ‘SEGUNDOS.MICROSEGUNDOS’ |
MINUTO_MICROSEGUNDO | ‘MINUTOS:SEGUNDOS.MICROSEGUNDOS’ |
MINUTO_SEGUNDO | 'MINUTOS:SEGUNDOS' |
HORA_MICROSEGUNDO | ‘HORAS:MINUTOS:SEGUNDOS.MICROSEGUNDOS’ |
HORA_SEGUNDO | ‘HORAS:MINUTOS:SEGUNDOS’ |
HORA_MINUTO | ‘HORAS:MINUTOS’ |
DÍA_MICROSEGUNDO | ‘DÍAS HORAS:MINUTOS:SEGUNDOS.MICROSEGUNDOS’ |
DÍA_SEGUNDO | ‘DÍAS HORAS:MINUTOS:SEGUNDOS’ |
DÍA_MINUTO | ‘DÍAS HORAS:MINUTOS’ |
DÍA_HORA | ‘DÍAS HORAS’ |
AÑO_MES | 'AÑOS-MESES' |