MySQL:如何在查询中的日期时间字段中添加一天


76

在我的表我有一个名为领域eventdatedatetime类似的格式2010-05-11 00:00:00

我如何进行查询,以使其在一天中增加一天eventdate例如今天是2010-05-11,我想显示inwhere子句以返回带有明天日期的所有记录。

更新:

我尝试了这个:

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

但是不幸的是,即使我添加的间隔大于1,它也会返回相同的记录。

结果:

2010-05-12 00:00:00

但是我只想选择明天的记录。

Answers:


140

您可以使用以下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()
David Yell

@phpBOY:你是对的。您必须使用-1与匹配CURRENT_DATE。尝试使用更新的查询。
丹尼尔·瓦萨洛

@Daniel Vassallo:您能否构造查询,因为Iam获取空记录集。谢谢

7

尝试一下,因为这就是我会做的:)

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

1
我认为那行不通。eventdate永远不会等于eventdate + 1 day。我想您打算CURDATE()在这里使用。
丹尼尔·瓦萨洛

3

可以使用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会更好。
维里(Vili)2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.