# Команда INTERVAL

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

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

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

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

## Синтаксис

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

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

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

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

## Команды

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

## Таблицы для примеров

таблица events
id айди | name событие | datetime дата и время
--- | --- | ---
1 | событие 1 | 2010-03-01 12:40:50
2 | событие 2 | 2011-04-02 13:41:51
3 | событие 3 | 2012-05-03 14:42:52

## Пример

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

`SELECT *, datetime + INTERVAL 1 DAY as new_date FROM events`

Результат выполнения кода:

id айди | name событие | datetime дата | new_date новая дата
--- | --- | --- | ---
1 | событие 1 | 2010-03-01 12:01:02 | 2010-03-02 12:01:02
2 | событие 2 | 2011-04-02 13:02:03 | 2011-05-03 13:02:03
3 | событие 3 | 2012-05-03 14:03:04 | 2012-06-04 14:03:04

## Пример

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

`SELECT *, datetime - INTERVAL 1 DAY as new_date FROM events`

Результат выполнения кода:

id айди | name имя | date дата | new_date новая дата
--- | --- | --- | ---
1 | user1 | 2010-03-01 12:01:02 | 2010-02-28 12:01:02
2 | user2 | 2011-04-02 13:02:03 | 2011-05-01 13:02:03
3 | user3 | 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 events`

Результат выполнения кода:

id айди | name имя | date дата | new_date новая дата
--- | --- | --- | ---
1 | user1 | 2010-03-01 12:01:02 | 2011-05-01 12:01:02
2 | user2 | 2011-04-02 13:02:03 | 2012-06-02 13:02:03
3 | user3 | 2012-05-03 14:03:04 | 2013-07-03 14:03:04

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

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

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

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

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

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

## Пример

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

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

Результат выполнения кода:

id айди | name имя | date дата | new_date новая дата
--- | --- | --- | ---
1 | user1 | 2010-03-01 12:01:02 | 2011-05-02 12:01:02
2 | user2 | 2011-04-02 13:02:03 | 2012-06-03 13:02:03
3 | user3 | 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 events`

## Пример

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

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

Результат выполнения кода:

id айди | name имя | date дата | new_date новая дата
--- | --- | --- | ---
1 | user1 | 2010-03-01 12:01:02 | 2011-01-02 12:01:02
2 | user2 | 2011-04-02 13:02:03 | 2012-02-03 13:02:03
3 | user3 | 2012-05-03 14:03:04 | 2013-03-04 14:03:04

## Смотрите также

- функцию `DATE_ADD`,
  которая прибавляет значение к дате
- функцию `DATE_SUB`,
  которая вычитает значение из даты

↑