Команда 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,
    которая вычитает значение из даты