Команда INTERVAL позволяет прибавлять к дате и отнимать от нее определенные промежутки времени.

См. также функции DATE_ADD и DATE_SUB.

Синтаксис

Прибавление даты:

SELECT дата + INTERVAL что_прибавить FROM имя_таблицы WHERE условие

Отнимание даты:

SELECT дата - INTERVAL что_отнять FROM имя_таблицы WHERE условие

После команды INTERVAL можно указывать определенную часть даты (день, месяц или год и тп), к примеру, так INTERVAL 1 DAY или INTERVAL 3 MONTH, или сразу несколько частей.

В этом случае значения даты берутся в кавычки, пример: давайте прибавим 1 год и 3 месяца - это будет выглядеть так: INTERVAL '1-3' YEAR_MONTH.

Мы указываем, что хотим год и месяц (вот так: YEAR_MONTH), и перед этим в кавычках пишем сначала значение для года, потом значение для месяца. Между ними ставим разделитель (он может быть абсолютно любым).

Смотрите список возможных комбинаций (разделители указаны для примера, они могут быть любыми):

Значение Ожидаемый формат
SECONDсекунды
MINUTEминуты
HOURчасы
DAYдни
MONTHмесяцы
YEARгода
MINUTE_SECOND"минуты:секунды"
HOUR_MINUTE"часы:минуты"
DAY_HOUR"дни часы"
YEAR_MONTH"года-месяцы"
HOUR_SECOND"часы:минуты:секунды"
DAY_MINUTE"дни часы:минуты"
DAY_SECOND"дни часы:минуты:секунды"

Примеры

Все примеры будут по этой таблице workers, если не сказано иное:

id
айди
name
имя
date
дата
1 Дима 2010-03-01 12:01:02
2 Петя 2011-04-02 13:02:03
3 Вася 2012-05-03 14:03:04

Пример

В данном примере к дате прибавляется 1 день:

SELECT *, date + INTERVAL 1 DAY as new_date FROM workers

SQL запрос выберет следующие строки:

id
айди
name
имя
date
дата
new_date
новая дата
1 Дима 2010-03-01 12:01:02 2010-03-02 12:01:02
2 Петя 2011-04-02 13:02:03 2011-05-03 13:02:03
3 Вася 2012-05-03 14:03:04 2012-06-04 14:03:04

Пример

В данном примере от даты отнимается 1 день:

SELECT *, date - INTERVAL 1 DAY as new_date FROM workers

SQL запрос выберет следующие строки:

id
айди
name
имя
date
дата
new_date
новая дата
1 Дима 2010-03-01 12:01:02 2010-02-28 12:01:02
2 Петя 2011-04-02 13:02:03 2011-05-01 13:02:03
3 Вася 2012-05-03 14:03:04 2012-06-02 14:03:04

Пример

В данном примере к дате прибавляется 1 год и 2 месяца:

SELECT *, date + INTERVAL "1-2" YEAR_MONTH as new_date FROM workers

SQL запрос выберет следующие строки:

id
айди
name
имя
date
дата
new_date
новая дата
1 Дима 2010-03-01 12:01:02 2011-05-01 12:01:02
2 Петя 2011-04-02 13:02:03 2012-06-02 13:02:03
3 Вася 2012-05-03 14:03:04 2013-07-03 14:03:04

Разделитель в запросе не имеет значения. Он может быть любым символом:

SELECT *, date + INTERVAL "1:2" YEAR_MONTH as new_date FROM workers

Можно использовать даже несколько символов:

SELECT *, date + INTERVAL "1:::2" YEAR_MONTH as new_date FROM workers

Можно использовать и пробел:

SELECT *, date + INTERVAL "1 2" YEAR_MONTH as new_date FROM workers

Пример

В данном примере к дате прибавляется 1 год, 2 месяца и 1 день:

SELECT
	*, date + INTERVAL 1 YEAR + INTERVAL 2 MONTH + INTERVAL 1 DAY as new_date
FROM workers

SQL запрос выберет следующие строки:

id
айди
name
имя
date
дата
new_date
новая дата
1 Дима 2010-03-01 12:01:02 2011-05-02 12:01:02
2 Петя 2011-04-02 13:02:03 2012-06-03 13:02:03
3 Вася 2012-05-03 14:03:04 2013-07-04 14:03:04

Запрос можно переписать таким образом:

SELECT *, date + INTERVAL "1 2" YEAR_MONTH + INTERVAL 1 DAY as new_date FROM workers

Пример

В данном примере к дате прибавляется 1 год, отнимаются 2 месяца и прибавляется 1 день:

SELECT
	*, date + INTERVAL 1 YEAR - INTERVAL 2 MONTH + INTERVAL 1 DAY as new_date
FROM workers

SQL запрос выберет следующие строки:

id
айди
name
имя
date
дата
new_date
новая дата
1 Дима 2010-03-01 12:01:02 2011-01-02 12:01:02
2 Петя 2011-04-02 13:02:03 2012-02-03 13:02:03
3 Вася 2012-05-03 14:03:04 2013-03-04 14:03:04