Интервал в MySQL

Описание : в этой статье вы узнаете, как использовать значения интервала MySQL для выполнения арифметики даты и времени.

 

Введение в интервальные значения MySQL

Значения интервала MySQL используются в основном для расчета даты и времени. Чтобы создать значение интервала, вы используете следующее выражение:

INTERVAL expr unit

 

За ним следует ключевое слово INTERVAL expr, определяющее значение интервала и unitуказывающее единицу измерения интервала. Например, чтобы создать 1-дневный интервал, вы используете следующее выражение:

INTERVAL 1 DAY

 

Обратите внимание, что INTERVAL и UNIT без учета регистра, поэтому следующее выражение эквивалентно приведенному выше:

interval 1 day

 

В основном мы используем интервальные значения для арифметики даты и времени, как показано ниже:

date + INTERVAL expr unit

date - INTERVAL expr unit

 

Значения интервалов также используются в различных временных функциях, таких как DATE_ADD, DATE_SUB, TIMESTAMPADD и TIMESTAMPDIFF

MySQL определяет стандартные форматы expr и unit как показано в следующей таблице:
























unitexpr
DAYДни
DAY_HOURДни: Часы
DAY_MICROSECONDДни: Микросекунды
DAY_MINUTEДни: Минуты
DAY_SECONDДни: Секунды
HOURЧасы
HOUR_MICROSECONDЧасы: Микросекунды
HOUR_MINUTEЧасы: Минуты
HOUR_SECONDЧасы: Секунды
MICROSECONDМикросекунд
MINUTEМинуты
MINUTE_MICROSECONDМинуты: Микросекунды
MINUTE_SECONDМинуты: Секунды
MONTHМесяц
QUARTERДекада
SECONDСекунды
SECOND_MICROSECONDСекунды: Микросекунды
WEEKНеделя
YEARГод
YEAR_MONTHГод: Месяц

Примеры интервалов в MySQL

Следующее утверждение добавляет 1 день к January 1st 2020:

SELECT '2020-01-01' + INTERVAL 1 DAY;

+-------------------------------+

| '2020-01-01' + INTERVAL 1 DAY |

+-------------------------------+

| 2020-01-02                    |

+-------------------------------+

1 row in set (0.01 sec)

 

Если значение интервала используется в выражении, которое включает значение DATE или значение интервала DATETIME находится справа от выражения, вы можете использовать отрицательное значение expr, как показано в следующем примере:

SELECT '2020-01-01' + INTERVAL -1 DAY;

+--------------------------------+

| '2020-01-01' + INTERVAL -1 DAY |

+--------------------------------+

| 2019-12-31                     |

+--------------------------------+

1 row in set(0.00sec)

 

Следующий оператор показывает, как использовать DATE_ADD и DATE_SUB, чтобы добавлять/вычитать 1 месяц из значения даты:

SELECT DATE_ADD('2020-01-01', INTERVAL 1 MONTH)1_MONTH_LATER,

DATE_SUB('2020-01-01',INTERVAL 1 MONTH) 1_MONTH_BEFORE;

+---------------+----------------+

| 1_MONTH_LATER | 1_MONTH_BEFORE |

+---------------+----------------+

| 2020-02-01    | 2019-12-01     |

+---------------+----------------+

1 row in set (0.00 sec)

 

Следующий запрос использует функцию TIMESTAMPADD(unit, interval, expression) для добавления 30 минут к значению временной метки:

SELECT TIMESTAMPADD(MINUTE,30,'2020-01-01') 30_MINUTES_LATER;

+---------------------+

| 30_MINUTES_LATER    |

+---------------------+

| 2020-01-01 00:30:00 |

+---------------------+

1 row in set (0.00 sec)

 

Практический пример интервала в MySQL

Давайте создать новую таблицу с именем memberships для демонстрации:

CREATE TABLE memberships (

id INT AUTO_INCREMENT PRIMARY KEY,

email VARCHAR(355) NOT NULL,

plan VARCHAR(255) NOT NULL,

expired_date DATE NOT NULL

);

 

В таблице memberships в столбце expired_date хранится дата окончания членства каждого участника.

Следующий оператор вставляет несколько строк в таблицу memberships.

INSERT INTO memberships(email, plan, expired_date)

VALUES('andreyex@example.ru','Gold','2020-02-13'),

('alex@example.ru','Platinum','2020-02-10'),

('max@example.ru','Silver','2020-02-08');

 

Предположим, сегодня 2020-02-06 вы можете найти участников, срок действия которых истек в течение 7 дней, с помощью следующего запроса:

SELECT

email,

plan,

expired_date,

DATEDIFF(expired_date, '2020-02-06') remaining_days

FROM

memberships

WHERE

'2020-02-06' BETWEEN DATE_SUB(expired_date, INTERVAL 7 DAY) AND expired_date;

 

В этом запросе мы использовали функцию DATE_SUB для вычитания истекшей даты на 7 дней, указанных значением интервала (INTERVAL 7 DAY).

В этой статье вы узнали, как использовать значение интервала MySQL для арифметики даты и времени.

 



2020-02-20T08:58:43
База данных MySQL