Как запросить дату и добавить 3 дня в результат?

У меня есть следующий запрос, который позволяет мне получить дату истечения срока подписки на план моего сайта:

SELECT DATE_FORMAT( `expiry_date`, '%d %m %Y' )
FROM `plan_cbsubs_subscriptions` 
WHERE `user_id` = '[user_id]'

Таким образом, если подписка на план заканчивается 27 июля следующего года, приведенный выше запрос возвращает «27 07 2013». Теперь моя цель - изменить этот запрос, чтобы добавить еще 3 дня, чтобы, наконец, вернуть «30 07 2013», даже если реальное значение хорошо «27 07 2013».

Я полагаю, что можно где-то добавить в запросе +3, но я не знаю правильного синтаксиса.


person dotcom22    schedule 20.07.2013    source источник
comment
Термин для этого — арифметика дат в следующий раз, когда он появится, и вам нужно будет найти его в Google.   -  person Andy Lester    schedule 20.07.2013


Ответы (2)


Что-то вроде этого должно работать:

SELECT DATE_FORMAT(DATE_ADD(`expiry_date`,INTERVAL 3 DAY), '%d %m %Y' )
FROM `plan_cbsubs_subscriptions` 
WHERE `user_id` = '[user_id]';

вычесть 3 дня:

SELECT DATE_FORMAT(DATE_SUB(`expiry_date`,INTERVAL 3 DAY), '%d %m %Y')
FROM `plan_cbsubs_subscriptions`
WHERE `user_id` = '[user_id]';

дополнительную информацию можно найти здесь: Дата добавления MySQL

person Oscerd    schedule 20.07.2013
comment
Я проверил ваше решение, но оно не работает на моей стороне. Где-то синтаксическая ошибка? Богемское решение работает, но я не понимаю, как его вычесть. Любая подсказка? - person dotcom22; 20.07.2013
comment
Отлично работает ваше решение ... но теперь я потерял свой формат %d %m %Y и ваш код отображается 2013-11-14 18:45:33. Я попытался добавить код, но не вижу правильного синтаксиса. - person dotcom22; 20.07.2013
comment
Теперь это должно работать. Извините, но в данный момент у меня нет базы данных для тестирования. - person Oscerd; 20.07.2013
comment
Ты сумасшедший? Что мне жаль раздражать вас с моим вопросом новичка. Вы качаетесь... ваше решение именно то, что мне было нужно. Большое спасибо - person dotcom22; 20.07.2013

Используйте ADDDATE():

SELECT DATE_FORMAT( ADDDATE(`expiry_date`, 3), '%d %m %Y' ) 
FROM `plan_cbsubs_subscriptions` 
WHERE `user_id` = '[user_id]'

Fyi ADDDATE() будет принимать отрицательные числа, если вы хотите вычесть дни:

ADDDATE(`expiry_date`, -3) -- 3 days before

Mysql также имеет SUBDATE(), поэтому вы также можете сделать:

SUBDATE(`expiry_date`, 3) -- 3 days before
person Bohemian♦    schedule 20.07.2013
comment
Отлично ... а если мне нужно сделать наоборот, что означает удалить 3 дня? - person dotcom22; 20.07.2013
comment
Либо умножить второй аргумент на -1, либо использовать subdate, я полагаю? - person hd1; 20.07.2013
comment
Извините, я не понимаю, что вы имеете в виду. Не могли бы вы написать пример, пожалуйста? - person dotcom22; 20.07.2013