När du kör frågor i MySQL kan du använda DAYOFYEAR()
funktion för att returnera dagen på året från ett datum.
Den här funktionen accepterar ett argument och den returnerar ett värde mellan 1 och 366 , beroende på vilken dag på året dagdelen av argumentet representerar.
Syntax
Syntaxen ser ut så här:
DAYOFYEAR(date)
Där date
är det datumvärde som du vill att dagen på året ska returneras från.
Exempel
Här är ett exempel att visa.
SELECT DAYOFYEAR('2019-01-01') AS 'Date 1', DAYOFYEAR('2019-12-31') AS 'Date 2';
Resultat:
+--------+--------+ | Date 1 | Date 2 | +--------+--------+ | 1 | 365 | +--------+--------+
I det här exemplet, för att visa den rätta effekten, kör jag den här funktionen två gånger på två olika datum – ett i början av året och det andra i slutet av året.
DAYOFYEAR() kontra DAYOFMONTH()
Här är ett exempel för att visa skillnaden mellan DAYOFYEAR()
och DAYOFMONTH()
funktioner.
SET @date = '2019-10-03'; SELECT @date, DAYOFMONTH(@date) AS 'Day of Month', DAYOFYEAR(@date) AS 'Day of Year';
Resultat:
+------------+--------------+-------------+ | @date | Day of Month | Day of Year | +------------+--------------+-------------+ | 2019-10-03 | 3 | 276 | +------------+--------------+-------------+
DAYOFMONTH()
funktion returnerar ett värde mellan 1 och 31 (eller 0 för datum med en nolldag del) som representerar dagen i månaden. Den återställs till 1 i början av varje månad.
DAYOFYEAR()
funktion å andra sidan, returnerar ett värde mellan 1 och 366 . Den återställs till 1 i början av varje år.
Ett databasexempel
Här är ett exempel på hur du använder DAYOFYEAR()
när du frågar efter en databas:
USE sakila; SELECT payment_date AS 'Date/Time', DAYOFYEAR(payment_date) AS 'Day of Year' FROM payment WHERE payment_id = 1;
Resultat:
+---------------------+-------------+ | Date/Time | Day of Year | +---------------------+-------------+ | 2005-05-25 11:30:37 | 145 | +---------------------+-------------+
Aktuellt datum/tid
Här är ett exempel på att extrahera dagdelen från det aktuella datumet och tiden (som returneras med NOW()
funktion).
SELECT NOW(), DAYOFYEAR(NOW());
Resultat:
+---------------------+------------------+ | NOW() | DAYOFYEAR(NOW()) | +---------------------+------------------+ | 2018-06-26 08:23:04 | 177 | +---------------------+------------------+
Ett annat sätt att göra detta är att använda CURDATE()
funktion, som endast returnerar datumet (men inte tiden).
SELECT CURDATE(), DAYOFYEAR(CURDATE());
Resultat:
+------------+----------------------+ | CURDATE() | DAYOFYEAR(CURDATE()) | +------------+----------------------+ | 2018-06-26 | 177 | +------------+----------------------+