W MySQL możesz użyć EXTRACT()
funkcja wyodrębniania części z daty. Na przykład możesz wyodrębnić część roku, część miesiąca lub część dnia itp. Możesz również wyodrębnić części ze składnika czasu, takie jak minuty, sekundy, mikrosekundy itp.
Ten artykuł zawiera przykłady do zademonstrowania.
Składnia
Składnia wygląda tak:
EXTRACT(unit FROM date)
Gdzie unit
to część daty, którą chcesz wyodrębnić, a date
to wartość daty, z której należy wyodrębnić tę część.
Zobacz tabelę na dole tego artykułu, aby zobaczyć listę prawidłowych specyfikatorów jednostek.
Przykład 1
Oto przykład demonstrujący podstawowe zastosowanie funkcji.
SELECT EXTRACT(YEAR FROM '2019-01-01') AS 'Result';
Wynik:
+--------+ | Result | +--------+ | 2019 | +--------+
Przykład 2 – Więcej części daty
Tutaj wyodrębniam różne części daty z daty.
SET @date = '2019-10-03'; SELECT EXTRACT(DAY FROM @date) AS 'Day', EXTRACT(MONTH FROM @date) AS 'Month', EXTRACT(YEAR FROM @date) AS 'Year';
Wynik:
+------+-------+------+ | Day | Month | Year | +------+-------+------+ | 3 | 10 | 2019 | +------+-------+------+
Przykład 3 – Wyodrębnianie części czasu
Tutaj wyodrębniam różne części czasu z daty.
SET @date = '2019-10-03 12:35:05.123456'; SELECT EXTRACT(HOUR FROM @date) AS 'Hours', EXTRACT(MINUTE FROM @date) AS 'Minutes', EXTRACT(SECOND FROM @date) AS 'Seconds', EXTRACT(MICROSECOND FROM @date) AS 'Microseconds';
Wynik:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 12 | 35 | 5 | 123456 | +-------+---------+---------+--------------+
Przykład 4 – Łączenie specyfikatorów jednostek
Możesz także łączyć specyfikatory jednostek w następujący sposób:
SET @date = '2019-10-03 12:35:05.123456'; SELECT EXTRACT(HOUR_MICROSECOND FROM @date) AS 'Result';
Wynik:
+--------------+ | Result | +--------------+ | 123505123456 | +--------------+
Ten przykład zwraca wszystko, od części godzinowej do części dotyczącej mikrosekund.
Przykład bazy danych
Oto przykład wyodrębnienia roku i miesiąca z kolumny w bazie danych:
USE sakila; SELECT payment_date AS 'Date/Time', EXTRACT(YEAR_MONTH FROM payment_date) AS 'Year/Month' FROM payment WHERE payment_id = 1;
Wynik:
+---------------------+------------+ | Date/Time | Year/Month | +---------------------+------------+ | 2005-05-25 11:30:37 | 200505 | +---------------------+------------+
Aktualna data/godzina
Tutaj wyodrębniam część miesiąca z daty wygenerowanej za pomocą CURDATE()
funkcja.
SELECT CURDATE(), EXTRACT(MONTH FROM CURDATE());
Wynik:
+------------+-------------------------------+ | CURDATE() | EXTRACT(MONTH FROM CURDATE()) | +------------+-------------------------------+ | 2018-06-26 | 6 | +------------+-------------------------------+
W tym przykładzie wyodrębniam część godzinową z bieżącej daty i czasu (która jest generowana za pomocą NOW()
funkcja).
SELECT NOW(), EXTRACT(HOUR FROM NOW());
Wynik:
+---------------------+--------------------------+ | NOW() | EXTRACT(HOUR FROM NOW()) | +---------------------+--------------------------+ | 2018-06-26 09:01:46 | 9 | +---------------------+--------------------------+
Oczekiwane wartości
Poniższa tabela przedstawia prawidłowe wartości jednostek i ich oczekiwany format.
unit Wartość | Oczekiwano expr Format |
---|---|
MIKROSEKUNDA | MIKROSEKUNDY |
DRUGA | SEKUND |
MINUTA | MINUT |
GODZINA | GODZINY |
DZIEŃ | DNI |
TYDZIEŃ | TYGODNIE |
MIESIĄC | MIESIĄCE |
KWARTAŁ | KWARTAŁ |
ROK | LAT |
SECOND_MICROSECOND | „SEKUND.MIKROSEKUNDY” |
MINUTE_MICROSECOND | „MINUTY:SEKUND.MIKROSEKUNDY” |
MINUTE_SECOND | „MINUTY:SEKUNDY” |
HOUR_MICROSECOND | „GODZINY:MINUTY:SEKUND.MIKROSEKUNDY” |
HOUR_SECOND | „GODZINY:MINUTY:SEKUNDY” |
GODZINA_MINUTA | „GODZINY:MINUTY” |
DAY_MICROSECOND | „DNI GODZINY:MINUTY:SEKUND.MIKROSEKUNDY” |
DAY_SECOND | „DNI GODZINY:MINUTY:SEKUNDY” |
DAY_MINUTE | „DNI GODZINY:MINUTY” |
DAY_HOUR | „DNI GODZINY” |
ROK_MIESIĄC | „LATA-MIESIĄCE” |