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

Ожидаемые значения

В следующей таблице показаны допустимые значения единиц измерения и их ожидаемый формат.