我的查询如下:
SELECT COUNT(entryID)
FROM table
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
这会计算当天date
值的行(从12:00开始,而不是在24小时内)?如果没有,我该怎么做?
答案 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)
更快。