5

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

这导致例如 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-03-12%”。

我不知道为什么它不起作用,但我确信至少有 1 场活动在 12 日举行。任何帮助表示赞赏。

4

4 回答 4

7

尝试使用 MySQL 的DATE()函数将日期列修剪为日期部分:

SELECT * 
FROM events 
WHERE (DATE(startDate) = '2013-03-12' AND DATE(endDate)= '2013-03-12')
于 2013-03-12T17:58:47.893 回答
3

您可以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'
于 2013-03-12T18:04:22.847 回答
2

MySQL 中的DATETIME数据类型也考虑了一天中的时间,因此它不会匹配任何内容。

如果您没有使用时间部分,那么您可以简单地将数据类型减少到DATE而不是DATETIME. 如果没有,您可以使用该DATE()功能摆脱时间部分,只考虑日期部分

于 2013-03-12T18:01:27.390 回答
0

在 Mysql 上使用时注意这一点between

date_column_name between 'startDate' AND 'endDate'

注意: 您应该将 +1 日期插入endDate. 因为当你插入 2015-05-18 日期到endDate.you 不能得到 2015-05-18 的数据。所以你需要加一个日期到endDate.

于 2015-05-18T07:44:29.647 回答