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 | +------------+----------------------+