我在事件表中有两列(都是datetime)startDate和endDate。
我正在使用php的date()
函数检索当天。
这导致例如2013-03-12。
现在有三种可能的事件与今天发生的日期相结合:
现在我想将这些全部分解为单独的查询,因为我不习惯使用日期。我从第一个查询开始,但我已经失败了。我尝试了以下内容:
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%”。
我不知道为什么它不起作用,我确信至少有一个事件发生在12日。任何帮助表示赞赏。
答案 0 :(得分:4)
尝试使用MySQL的DATE()
函数将日期列修剪为日期部分:
SELECT *
FROM events
WHERE (DATE(startDate) = '2013-03-12' AND DATE(endDate)= '2013-03-12')
答案 1 :(得分: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
答案 2 :(得分:1)
MySQL中的DATETIME
数据类型也考虑了当天的时间,因此,它不会匹配任何内容。
如果您没有使用时间部分,那么您可以简单地将数据类型减少到DATE
而不是DATETIME
。如果没有,您可以使用DATE()
函数去掉时间部分,只考虑日期部分
答案 3 :(得分:0)
请注意,在Mysql上使用 between
date_column_name between 'startDate' AND 'endDate'
注意:您应该向endDate
插入+1日期。因为当您将2015-05-18日期插入endDate
时,您无法获取2015-05-18的数据。因此,您需要将一个日期加上endDate
。