Ao executar consultas no MySQL, você pode usar o
DAYOFYEAR()
função para retornar o dia do ano a partir de uma data. Esta função aceita um argumento e retorna um valor entre 1 e 366 , dependendo de qual dia do ano a parte do dia do argumento representa.
Sintaxe
A sintaxe fica assim:
DAYOFYEAR(date)
Onde
date
é o valor de data do qual você deseja que o dia do ano seja retornado. Exemplo
Aqui está um exemplo para demonstrar.
SELECT DAYOFYEAR('2019-01-01') AS 'Date 1', DAYOFYEAR('2019-12-31') AS 'Date 2';
Resultado:
+--------+--------+ | Date 1 | Date 2 | +--------+--------+ | 1 | 365 | +--------+--------+
Neste exemplo, para demonstrar o efeito adequado, executo essa função duas vezes em duas datas diferentes – uma no início do ano e outra no final do ano.
DAYOFYEAR() vs DAYOFMONTH()
Aqui está um exemplo para demonstrar a diferença entre o
DAYOFYEAR()
e DAYOFMONTH()
funções. SET @date = '2019-10-03'; SELECT @date, DAYOFMONTH(@date) AS 'Day of Month', DAYOFYEAR(@date) AS 'Day of Year';
Resultado:
+------------+--------------+-------------+ | @date | Day of Month | Day of Year | +------------+--------------+-------------+ | 2019-10-03 | 3 | 276 | +------------+--------------+-------------+
O
DAYOFMONTH()
função retorna um valor entre 1 e 31 (ou 0 para datas com parte do dia zero) que representa o dia do mês. Ele é redefinido para 1 no início de cada mês. O
DAYOFYEAR()
por outro lado, retorna um valor entre 1 e 366 . Ele é redefinido para 1 no início de cada ano. Um exemplo de banco de dados
Aqui está um exemplo de uso de
DAYOFYEAR()
ao consultar um banco de dados:USE sakila; SELECT payment_date AS 'Date/Time', DAYOFYEAR(payment_date) AS 'Day of Year' FROM payment WHERE payment_id = 1;
Resultado:
+---------------------+-------------+ | Date/Time | Day of Year | +---------------------+-------------+ | 2005-05-25 11:30:37 | 145 | +---------------------+-------------+
Data/hora atual
Aqui está um exemplo de extração da parte do dia da data e hora atuais (que é retornada usando o
NOW()
função). SELECT NOW(), DAYOFYEAR(NOW());
Resultado:
+---------------------+------------------+ | NOW() | DAYOFYEAR(NOW()) | +---------------------+------------------+ | 2018-06-26 08:23:04 | 177 | +---------------------+------------------+
Outra maneira de fazer isso é usar o
CURDATE()
função, que retorna apenas a data (mas não a hora). SELECT CURDATE(), DAYOFYEAR(CURDATE());
Resultado:
+------------+----------------------+ | CURDATE() | DAYOFYEAR(CURDATE()) | +------------+----------------------+ | 2018-06-26 | 177 | +------------+----------------------+