MYSQL选择这一天内的日期

时间:2012-03-30 19:12:59

标签: mysql date

我的查询如下:

SELECT COUNT(entryID) 
FROM table 
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)

这会计算当天date的行(从12:00开始,而不是在24小时内)?如果没有,我该怎么做?

3 个答案:

答案 0 :(得分:12)

以下内容应足以在当天获取记录:

SELECT COUNT(entryID) 
FROM table 
WHERE date >= CURDATE()

正如迈克尔在评论中指出的那样,它会查看过去两天内目前形式的所有记录。

只有当>=实际上是date时才需要datetime运算符 - 如果它只是date类型,=就足够了。

答案 1 :(得分:2)

以下是解决方案:

SELECT COUNT(entryID) FROM table WHERE DATE(date) >= CURDATE()

由于我的date列的类型为DATETIME,因此我使用DATE(date)来获取日期部分,而不是时间部分。

答案 2 :(得分:1)

CURDATE()返回类似'2012-03-30'的日期,而不是像'2012-03-30 21:38:17'那样的时间戳。减去一天也只返回一个日期,而不是时间戳。如果您想将日期视为时间戳,请将其视为当天的开始,即时间为'00:00:00'。

这就是为什么这个原因

WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)

和这个

WHERE date > CURDATE()

做同样的事。

我有另一个提示:SELECT COUNT(entryID)SELECT COUNT(*)给出相同的结果。 SELECT COUNT(*)为数据库机器提供了更多优化计数的功能,因此COUNT(*)通常(并非总是)比COUNT(field)更快。