Команда 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 дни часы:минуты:секунды
Таблицы для примеров
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 |