MySQL: Як додати один день до поля datetime у запиті


78

У моїй таблиці є поле з іменем eventdateу datetimeформаті типу 2010-05-11 00:00:00.

Як я можу зробити запит таким чином , що він додає один день до eventdateприкладу , якщо сьогодні 2010-05-11, я хочу показати в whereстатті , щоб повернути всі записи з завтрашнім днем.

Оновлення:

Я спробував це:

select * from fab_scheduler where custid = 1334666058 and DATE_ADD(eventdate, INTERVAL 1 DAY)

Але, на жаль, він повертає той самий запис, навіть якщо я додаю інтервал, більший за 1.

Результат:

2010-05-12 00:00:00

Але я хочу лише вибрати записи із завтрашньою датою.

Відповіді:


142

Ви можете використовувати DATE_ADD()функцію:

... WHERE DATE(DATE_ADD(eventdate, INTERVAL -1 DAY)) = CURRENT_DATE

Він також може бути використаний у SELECTтвердженні:

SELECT DATE_ADD('2010-05-11', INTERVAL 1 DAY) AS Tomorrow;
+------------+
| Tomorrow   |
+------------+
| 2010-05-12 |
+------------+
1 row in set (0.00 sec)

1
@phpBOY: Я думаю, ви пропустили частину `= CURRENT_DATE`.
Даніель Вассалло,

я спробував це, select * from fab_scheduler where custid = 1334666058 and DATE(DATE_ADD(eventdate, INTERVAL 1 DAY)) = CURRENT_DATE але тепер він повертає порожній набір результатів :(

1
Я б особисто використовував CURDATE ()
Девід Йелл,

@phpBOY: Ти маєш рацію. Ви повинні використовувати, -1щоб відповідати CURRENT_DATE. Спробуйте оновити запит.
Даніель Вассалло,

@ Даніель Вассалло: Не могли б ви побудувати запит, я отримую порожній запис. Дякую

7

Поспілкуйтеся з цим, оскільки я б так це зробив :)

SELECT * 
FROM fab_scheduler
WHERE custid = '123456'
AND CURDATE() = DATE(DATE_ADD(eventdate, INTERVAL 1 DAY))

1
Я не думаю, що це може спрацювати. eventdateніколи не буде рівним eventdate + 1 day. Думаю, ви мали намір CURDATE()там вживати .
Даніель Вассалло,

5

Можна використовувати конкретний синтаксис цукру MySQL:

SELECT ... date_field + INTERVAL 1 DAY

Виглядає набагато симпатичніше замість функції DATE_ADD


1

Якщо ви можете використовувати NOW (), це буде найпростіша форма:

SELECT * FROM `fab_scheduler` WHERE eventdate>=(NOW() - INTERVAL 1 DAY)) AND eventdate<NOW() ORDER BY eventdate DESC;

З MySQL 5.6+ запит abowe повинен робити. Залежно від сервера sql, вам може знадобитися використовувати CURRDATE()замість NOW()- що є псевдонімом DATE(NOW())і поверне лише дату типу datetimeданих;


0

Як щодо цього: 

select * from fab_scheduler where custid = 1334666058 and eventdate = eventdate + INTERVAL 1 DAY


-3
$date = strtotime(date("Y-m-d", strtotime($date)) . " +1 day");

Або, простіше:

date("Y-m-d H:i:s", time()+((60*60)*24));

Ви не розраховували на перехід на літній час. mktime було б краще.
Вілі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.