DATE_ADD ()

DATE_ADD(date,INTERVAL expr type)

DATE_SUB(date,INTERVAL expr type)

ADDDATE(date,INTERVAL expr type)

SUBDATE(date,INTERVAL expr type)

Дані функції роблять арифметичні дії над датами. Аргумент date є величиною типу DATETIME або DATE, що задає початкову дату. Вираз expr задає величину інтервалу, який слід додати до початкової дати або відняти з початкової дати. Вираз expr є рядок, який може починатися з - для негативних значень інтервалів. Ключове слово type показує, яким чином необхідно інтерпретувати даний вираз. Допоміжна функція EXTRACT(type FROM date) повертає інтервал зазначеного типу (type) зі значення дати. У наступній таблиці показаний взаємозв'язок аргументів type і expr:

 

 

Значення Type

Очікуваний формат expr

SECOND

SECONDS

MINUTE

MINUTES

HOUR

HOURS

DAY

DAYS

MONTH

MONTHS

YEAR

YEARS

MINUTE_SECOND

"MINUTES:SECONDS"

HOUR_MINUTE

"HOURS:MINUTES"

DAY_HOUR

"DAYS HOURS"

YEAR_MONTH

"YEARS-MONTHS"

HOUR_SECOND

"HOURS:MINUTES:SECONDS"

DAY_MINUTE

"DAYS HOURS:MINUTES"

DAY_SECOND

"DAYS HOURS:MINUTES:SECONDS"

 

 

В Mysql формат виразу expr допускає будь-які розділові знаки. Роздільники, представлені в даній таблиці, наведені в якості прикладів. Якщо аргумент date є величиною типу DATE і передбачувані обчислення містять у собі тільки частини YEAR, MONTH, і DAY ( тобто не містять тимчасової частини TIME), то результат представляється величиною типу DATE. В інших випадках результат являє собою величину DATETIME:

 

SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 SECOND);-> 1998-01-01 00:00:00

SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 DAY);-> 1998-01-01 23:59:59

SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND);
-> 1998-01-01 00:01:00
SELECT DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DAY_SECOND);
-> 1997-12-30 22:58:59
SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR);
-> 1997-12-30 14:00:00
SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); -> 1997-12-02

 

Якщо зазначений інтервал занадто короткий ( тобто не включає всі частини інтервалу, очікувані при заданому ключовому слові type), то Mysql припускає, що опущені крайні ліворуч частини інтервалу. Наприклад, якщо зазначений аргумент type у вигляді DAY_SECOND, теобто очікуваний вираз expr повинен мати наступні частини: дні, години, хвилини й секунди. Якщо в цьому випадку вказати значення інтервалу у вигляді "1:10", то Mysql припускає, що опущені дні і години, а дана величина включає тільки хвилини й секунди. Інакше кажучи, комбінація "1:10" DAY_SECOND інтерпретується як еквівалент "1:10" MINUTE_SECOND. Аналогічним чином в Mysql інтерпретуються й значення TIME. Будьте пильними так як тип може з DATE перевестися в DATETIME.

 

SELECT DATE_ADD("1999-01-01", INTERVAL 1 DAY); -> 1999-01-02

SELECT DATE_ADD("1999-01-01", INTERVAL 1 HOUR); -> 1999-01-01 01:00:00

 

При використанні некоректних значень дат результат буде рівний NULL. Якщо при підсумовуванні MONTH, YEAR_MONTH або YEAR номер дня в результуючій даті перевищує максимальну кількість днів у новому місяці, то номер дня результуючої дати буде рівним останньому дню нового місяця:

 

SELECT DATE_ADD('1998-01-30', INTERVAL 1 MONTH); -> 1998-02-28