No MySQL, você pode usar o
EXTRACT()
função para extrair partes de uma data. Por exemplo, você pode extrair a parte do ano, a parte do mês ou a parte do dia etc. Você também pode extrair partes do componente de hora, como minutos, segundos, microssegundos etc. Este artigo contém exemplos para demonstrar.
Sintaxe
A sintaxe fica assim:
EXTRATO(unidade FROM data)
Onde
unit
é a parte da data que você deseja extrair e date
é o valor de data do qual extrair essa parte. Consulte a tabela na parte inferior deste artigo para obter uma lista de especificadores de unidade válidos.
Exemplo 1
Aqui está um exemplo para demonstrar o uso básico da função.
SELECT EXTRACT(YEAR FROM '2019-01-01') AS 'Result';
Resultado:
+--------+| Resultado |+--------+| 2019 |+--------+
Exemplo 2 – Mais partes de data
Aqui eu extraio as várias partes de uma data.
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:
+------+-------+------+| Dia | Mês | Ano |+------+-------+------+| 3 | 10 | 2019 |+------+-------+------+
Exemplo 3 – Extraindo Partes do Tempo
Aqui eu extraio várias partes de tempo de uma data.
SET @date ='2019-10-03 12:35:05.123456';SELECT EXTRACT(HOUR FROM @date) AS 'Horas', EXTRACT(MINUTE FROM @date) AS 'Minutes', EXTRACT(SECOND FROM @ date) AS 'Seconds', EXTRACT(MICROSECOND FROM @date) AS 'Microseconds';
Resultado:
+-------+---------+---------+--------------+| Horas | Minutos | Segundos | Microssegundos |+-------+---------+---------+--------------+| 12 | 35 | 5 | 123456 |+-------+---------+---------+--------------+
Exemplo 4 – Combinando especificadores de unidade
Você também pode combinar especificadores de unidade, assim:
SET @date ='2019-10-03 12:35:05.123456';SELECT EXTRACT(HOUR_MICROSECOND FROM @date) AS 'Result';
Resultado:
+--------------+| Resultado |+----------+| 123505123456 |+------------------+
Este exemplo retorna tudo, desde a parte das horas até a parte dos microssegundos.
Um exemplo de banco de dados
Aqui está um exemplo de extração do ano e mês de uma coluna em um banco de dados:
USE sakila;SELECT payment_date AS 'Data/Hora', EXTRACT(YEAR_MONTH FROM payment_date) AS 'Year/Month'FROM paymentWHERE payment_id =1;
Resultado:
+----------+------------+| Data/Hora | Ano/Mês |+----------+------------+| 25-05-2005 11:30:37 | 200505 |+---------------------+----------------+
Data/hora atual
Aqui, extraio a parte do mês de uma data gerada com o
CURDATE()
função. SELECT CURDATE(), EXTRACT(MONTH FROM CURDATE());
Resultado:
+------------+------------------------------------------+| CURDADO() | EXTRACT(MÊS DE CURDATE()) |+------------+--------------------------- ----+| 26-06-2018 | 6 |+------------+-------------------------------+
Neste exemplo eu extraio a parte da hora da data e hora atuais (que é gerada com oNOW()
função).
SELECT NOW(), EXTRACT(HOUR FROM NOW());
Resultado:
+---------------------+------------------------ --+| AGORA() | EXTRACT(HORA DE AGORA()) |+--------------------------------+------------------ --------+| 2018-06-26 09:01:46 | 9 |+---------------------+------------------------- -+Valores esperados
A tabela a seguir mostra os valores de unidade válidos e seu formato esperado.
unit Valor | Esperado expr Formato |
---|---|
MICROSSEGUNDO | MICROSSEGUNDOS |
SEGUNDA | SEGUNDOS |
MINUTO | MINUTOS |
HORA | HORÁRIOS |
DIA | DIAS |
SEMANA | SEMANAS |
MÊS | MESES |
QUARTO | QUARTOS |
ANO | ANOS |
SECOND_MICROSECOND | 'SEGUNDOS.MICROSSEGUNDOS' |
MINUTE_MICROSECOND | 'MINUTOS:SEGUNDOS.MICROSSEGUNDOS' |
MINUTE_SECOND | 'MINUTOS:SEGUNDOS' |
HOUR_MICROSECOND | 'HORAS:MINUTOS:SEGUNDOS.MICROSSEGUNDOS' |
HOUR_SECOND | 'HORAS:MINUTOS:SEGUNDOS' |
HOUR_MINUTE | 'HORAS:MINUTOS' |
DAY_MICROSECOND | 'DIAS HORAS:MINUTOS:SEGUNDOS.MICROSSEGUNDOS' |
DAY_SECOND | 'DIAS HORAS:MINUTOS:SEGUNDOS' |
DAY_MINUTE | 'DIAS HORAS:MINUTOS' |
DAY_HOUR | 'DIAS HORAS' |
YEAR_MONTH | 'ANOS-MESES' |