我的查询看起来是这样的范围内:MYSQL选取日这一天
SELECT COUNT(entryID)
FROM table
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
这会不会算,其date
值一天中的行(在12点开始,24小时内没有)?如果不是,我该怎么做?
我的查询看起来是这样的范围内:MYSQL选取日这一天
SELECT COUNT(entryID)
FROM table
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
这会不会算,其date
值一天中的行(在12点开始,24小时内没有)?如果不是,我该怎么做?
下应该足以当前一天之内获得记录:
SELECT COUNT(entryID)
FROM table
WHERE date >= CURDATE()
正如迈克尔在评论中指出,它着眼于所有记录在其目前的形式在过去两天内。
的>=
运营商是唯一必要的,如果date
实际上是一个datetime
- 如果它只是一个date
类型,=
应该足够了。
感谢。你写了解决方案,因为我正在写自己的解决方案。 (尽管我使用'DATE(date)'来获取日期部分)。 – Hope4You 2012-03-30 19:21:44
@ Hope4You - 酷!只要使用'='应该就足够了,并且在那里有将来的日期的情况下更加正确。 – 2012-03-30 19:27:43
我只记得现在使用'DATE(date)'会停止行'日期'行上的索引。即使“date”是'DATETIME',它是否会对我使用'WHERE date> = CURDATE()'?它仍然只能从一天的开始获得排? – Hope4You 2012-04-02 18:10:37
这里的解决方案:
SELECT COUNT(entryID) FROM table WHERE DATE(date) >= CURDATE()
由于我date
列的类型DATETIME
,我用DATE(date)
只得到的日期部分,而不是时间的一部分。
该解决方案性能非常差,它必须将该函数应用于表中的每一行,并与当前日期之后进行比较。用一张大桌子会出现性能问题。 – Jokin 2013-10-01 13:39:25
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(*)
给数据库机器更posibilities优化计数,所以COUNT(*)
通常(不总是)比COUNT(field)
更快。
我觉得我的解决办法是'WHERE DAYNAME(日期)== CURDATE()'。问题是'DAYNAME'返回单词形式'Friday'。我需要数字形式,以便它可以与'CURDATE()'进行比较。 – Hope4You 2012-03-30 19:16:38
它将返回昨天的所有记录,从一天开始,不仅在运行24小时内的记录。 – 2012-03-30 19:18:30
'选择DATE_SUB(CURDATE(),间隔1天)''返回2012-03-29',所以'> =“2012-03-29'是从昨天和今天的所有记录。 – 2012-03-30 19:19:14