2013-03-12 224 views
4

我在事件表中有两列(两个日期时间)startDate和endDate。 我使用php的date()函数检索当前日期。两列之间的Mysql日期时间

此结果以2013-03-12为例。

现在有活动的日期相结合的三种可能今天发生的:

  1. 事件开始并结束在这一天
  2. 事件已经起步较早今天结束
  3. 事件开始今天但结束在未来(> = 2013-03-13)

现在我想分解成单独的查询,因为我不习惯使用日期。我从第一个查询开始,但我已经失败了。我已经试过如下:

SELECT * FROM events WHERE (startDate= '2013-03-12' AND endDate= '2013-03-12') 

藏汉为:

SELECT * FROM events WHERE NOT (startDate < '2013-03-12' OR endDate > '2013-03-12') 

我试图用藏汉DATE()和格式化日期,如“2013年3月12日%”。

我不知道为什么它不起作用,而我确定至少有一个事件发生在12日。任何帮助表示赞赏。

+0

问题是'datetime'列也包含_time_。 – Barmar 2013-03-12 18:00:46

回答

4

尝试使用MySQL的DATE()功能修剪日期列的只是日期部分:

SELECT * 
FROM events 
WHERE (DATE(startDate) = '2013-03-12' AND DATE(endDate)= '2013-03-12') 
+0

啊..我在输入日期使用了DATE()函数! – Gooey 2013-03-12 18:14:45

1

DATETIME数据类型在MySQL认为一天的时间一样,所以,它不会匹配任何东西。

如果您没有任何使用时间部分,那么您可以简单地将数据类型简化为DATE而不是DATETIME。如果没有,你可以使用DATE()功能摆脱了时间的一部分,并只考虑日期部分

1

可以使用DATE()功能其他答案建议,但我认为这使得它很难对使用索引列。相反,您可以在您的比较时间:

SELECT * 
FROM events 
WHERE startDate BETWEEN '2013-03-12 00:00:00' AND 2013-03-12 23:59:59 
    AND endDate BETWEEN '2013-03-12 00:00:00' AND 2013-03-12 23:59:59 
0

时要特别注意在MySQL使用between

date_column_name between 'startDate' AND 'endDate' 

注:你应该要插入+1日期endDate。因为当你插入2015-05-18日期到endDate。你无法获得2015-05-18的数据。所以你需要加上一个日期到endDate

相关问题