Exctract в SQL: Извлечение года, месяца, дня и т.д. из даты
Функция Extract применима в таких СУБД как - MySQL/PostgreSQL/MariaDB и других, вы можете использовать EXTRACT() функцию для извлечения частей из даты. Например, вы можете извлечь часть года, часть месяца или часть дня и т. д. Вы также можете извлечь части из компонента времени, такие как минуты, секунды, микросекунды и т. д. В этой статье приведены примеры для демонстрации.
Синтаксис
Синтаксис выглядит следующим образом:
EXTRACT(unit FROM date)
Где unit
находит часть даты, которую вы хотите извлечь, и date
значение даты, из которого нужно извлечь эту часть.
Список допустимых спецификаторов единиц смотрите в таблице внизу этой статьи.
Пример 1
Вот пример, демонстрирующий базовое использование функции.
SELECT EXTRACT(YEAR FROM '2019-01-01') AS 'Result';
Результат:
+--------+ | Результат | +--------+ | 2019 | +--------+
Пример 2. Дополнительные части даты
Здесь я извлекаю из даты различные части даты.
SET @date = '2019-10-03'; SELECT EXTRACT(DAY FROM @date) AS 'Day', EXTRACT(MONTH FROM @date) AS 'Month', EXTRACT(YEAR FROM @date) AS 'Year';
Результат:
+------+-------+------+ | день | Месяц | Год | +------+-------+------+ | 3 | 10 | 2019 | +------+-------+------+
Пример 3 – Извлечение частей времени
Здесь мы извлекаем из даты различные части времени.
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';
Результат:
+-------+---------+---------+--------------+ | Часы | Минуты | Секунды | Микросекунды | +-------+---------+---------+--------------+ | 12 | 35 | 5 | 123456 | +-------+---------+---------+--------------+
Пример 4. Объединение спецификаторов единиц измерения
Вы также можете комбинировать спецификаторы единиц измерения, например:
SET @date = '2019-10-03 12:35:05.123456'; SELECT EXTRACT(HOUR_MICROSECOND FROM @date) AS 'Result';
Результат:
+--------------+ | Результат | +--------------+ | 123505123456 | +--------------+
Этот пример возвращает все, от части часов до части микросекунд.
Пример базы данных
Вот пример извлечения года и месяца из столбца базы данных:
USE sakila; SELECT payment_date AS 'Date/Time', EXTRACT(YEAR_MONTH FROM payment_date) AS 'Year/Month' FROM payment WHERE payment_id = 1;
Результат:
+---------------------+------------+ | Дата/Время | Год/Месяц | +---------------------+------------+ | 2005-05-25 11:30:37 | 200505 | +---------------------+------------+
Текущая дата/время
Здесь мы извлекаем часть месяца из даты, созданной с помощью CURDATE()
функции.
SELECT CURDATE(), EXTRACT(MONTH FROM CURDATE());
Результат:
+------------+-------------------------------+ | CURDATE() | EXTRACT(MONTH FROM CURDATE()) | +------------+-------------------------------+ | 2018-06-26 | 6 | +------------+-------------------------------+
В этом примере мы извлекаем часовую часть из текущей даты и времени (которые создаются с помощью функции NOW()
).
SELECT NOW(), EXTRACT(HOUR FROM NOW());
Результат:
+---------------------+--------------------------+ | NOW() | EXTRACT(HOUR FROM NOW()) | +---------------------+--------------------------+ | 2018-06-26 09:01:46 | 9 | +---------------------+--------------------------+
Ожидаемые значения
В следующей таблице показаны допустимые значения единиц измерения и их ожидаемый формат.