Při spouštění dotazů v MySQL můžete použít DAYOFYEAR() funkce vrátit den v roce z data.
Tato funkce přijímá jeden argument a vrací hodnotu mezi 1 a 366 , v závislosti na tom, který den v roce část argumentu představuje.
Syntaxe
Syntaxe vypadá takto:
DAYOFYEAR(date)
Kde date je hodnota data, ze které chcete vrátit den v roce.
Příklad
Zde je příklad k demonstraci.
SELECT
DAYOFYEAR('2019-01-01') AS 'Date 1',
DAYOFYEAR('2019-12-31') AS 'Date 2';
Výsledek:
+--------+--------+ | Date 1 | Date 2 | +--------+--------+ | 1 | 365 | +--------+--------+
V tomto příkladu, abych demonstroval správný efekt, spustím tuto funkci dvakrát ve dvou různých datech – jedno na začátku roku a druhé na konci roku.
DAYOFYEAR() vs DAYOFMONTH()
Zde je příklad demonstrující rozdíl mezi DAYOFYEAR() a DAYOFMONTH() funkce.
SET @date = '2019-10-03';
SELECT
@date,
DAYOFMONTH(@date) AS 'Day of Month',
DAYOFYEAR(@date) AS 'Day of Year';
Výsledek:
+------------+--------------+-------------+ | @date | Day of Month | Day of Year | +------------+--------------+-------------+ | 2019-10-03 | 3 | 276 | +------------+--------------+-------------+
DAYOFMONTH() funkce vrací hodnotu mezi 1 a 31 (nebo 0 pro data s nulovou částí dne), která představuje den v měsíci. Obnoví se zpět na 1 na začátku každého měsíce.
DAYOFYEAR() funkce na druhé straně vrací hodnotu mezi 1 a 366 . Obnoví se zpět na 1 na začátku každého roku.
Příklad databáze
Zde je příklad použití DAYOFYEAR() při dotazu na databázi:
USE sakila; SELECT payment_date AS 'Date/Time', DAYOFYEAR(payment_date) AS 'Day of Year' FROM payment WHERE payment_id = 1;
Výsledek:
+---------------------+-------------+ | Date/Time | Day of Year | +---------------------+-------------+ | 2005-05-25 11:30:37 | 145 | +---------------------+-------------+
Aktuální datum/čas
Zde je příklad extrahování části dne z aktuálního data a času (který je vrácen pomocí NOW() funkce).
SELECT
NOW(),
DAYOFYEAR(NOW());
Výsledek:
+---------------------+------------------+ | NOW() | DAYOFYEAR(NOW()) | +---------------------+------------------+ | 2018-06-26 08:23:04 | 177 | +---------------------+------------------+
Dalším způsobem, jak toho dosáhnout, je použít CURDATE() funkce, která vrací pouze datum (ale ne čas).
SELECT
CURDATE(),
DAYOFYEAR(CURDATE());
Výsledek:
+------------+----------------------+ | CURDATE() | DAYOFYEAR(CURDATE()) | +------------+----------------------+ | 2018-06-26 | 177 | +------------+----------------------+