Uruchamiając zapytania w MySQL, możesz użyć DAYOFYEAR() funkcja zwracająca dzień roku od daty.
Ta funkcja przyjmuje jeden argument i zwraca wartość z przedziału 1 i 366 , w zależności od tego, który dzień roku reprezentuje część dnia argumentu.
Składnia
Składnia wygląda tak:
DAYOFYEAR(date)
Gdzie date to wartość daty, z której ma być zwracany dzień roku.
Przykład
Oto przykład do zademonstrowania.
SELECT
DAYOFYEAR('2019-01-01') AS 'Date 1',
DAYOFYEAR('2019-12-31') AS 'Date 2';
Wynik:
+--------+--------+ | Date 1 | Date 2 | +--------+--------+ | 1 | 365 | +--------+--------+
W tym przykładzie, aby zademonstrować właściwy efekt, uruchamiam tę funkcję dwukrotnie w dwóch różnych terminach – jednej na początku roku, a drugiej pod koniec roku.
DAYOFYEAR() vs DAYOFMONTH()
Oto przykład pokazujący różnicę między DAYOFYEAR() i DAYOFMONTH() funkcje.
SET @date = '2019-10-03';
SELECT
@date,
DAYOFMONTH(@date) AS 'Day of Month',
DAYOFYEAR(@date) AS 'Day of Year';
Wynik:
+------------+--------------+-------------+ | @date | Day of Month | Day of Year | +------------+--------------+-------------+ | 2019-10-03 | 3 | 276 | +------------+--------------+-------------+
DAYOFMONTH() funkcja zwraca wartość pomiędzy 1 i 31 (lub 0 dla dat z częścią dnia zerowego), która reprezentuje dzień miesiąca. Wraca do 1 na początku każdego miesiąca.
DAYOFYEAR() z drugiej strony, zwraca wartość z przedziału 1 i 366 . Wraca do 1 na początku każdego roku.
Przykład bazy danych
Oto przykład użycia DAYOFYEAR() podczas odpytywania bazy danych:
USE sakila; SELECT payment_date AS 'Date/Time', DAYOFYEAR(payment_date) AS 'Day of Year' FROM payment WHERE payment_id = 1;
Wynik:
+---------------------+-------------+ | Date/Time | Day of Year | +---------------------+-------------+ | 2005-05-25 11:30:37 | 145 | +---------------------+-------------+
Aktualna data/godzina
Oto przykład wyodrębnienia części dnia z bieżącej daty i godziny (która jest zwracana za pomocą funkcji NOW() funkcja).
SELECT
NOW(),
DAYOFYEAR(NOW());
Wynik:
+---------------------+------------------+ | NOW() | DAYOFYEAR(NOW()) | +---------------------+------------------+ | 2018-06-26 08:23:04 | 177 | +---------------------+------------------+
Innym sposobem na to jest użycie CURDATE() funkcja, która zwraca tylko datę (ale nie godzinę).
SELECT
CURDATE(),
DAYOFYEAR(CURDATE());
Wynik:
+------------+----------------------+ | CURDATE() | DAYOFYEAR(CURDATE()) | +------------+----------------------+ | 2018-06-26 | 177 | +------------+----------------------+