Описание : в этой статье вы узнаете, как использовать значения интервала 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 как показано в следующей таблице:
unit | expr |
---|---|
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 | Год: Месяц |
Следующее утверждение добавляет 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)
Давайте создать новую таблицу с именем 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 для арифметики даты и времени.