选择特定日期的记录的MySql查询

36

目前我在我的网站上存储每次搜索的日期,就像这样:

2011-06-07 21:44:01

现在我想执行一个查询,选择所有日期等于某个值的记录,但只考虑年/月和日,查询应该是这样的:

mysql_query("SELECT tag from tags WHERE date = '2011-06-07'");

但它不应考虑准确的时间(小时、分钟、秒),有没有办法做到这一点?

4个回答

74
你可以使用 DATE() 函数。
SELECT `tag`
  FROM `tags`
 WHERE DATE(`date`) = '2011-06-07'

然而,为了获得更好的性能,您可以使用...

  WHERE `date` 
BETWEEN '2011-06-07'
    AND '2011-06-07 23:59:59'

6
使用 DATE() 函数会引起全表扫描。 - alex
它的性能更好,但可能不正确。DATETIME和TIMESTAMP允许使用小数秒,因此DATETIME时间“2011-06-07 23:59:59.5”将从第二个示例中省略。也许更好的方法是使用WHERE '2011-06-07 <= date AND date < '2011-06-08'。或者您可以假设没有日期有小数秒,这几乎肯定是正确的(几乎总是)。 - Peter N Lewis

7
这应该可以工作:
mysql_query("SELECT tag from tags WHERE date LIKE '2011-06-07%'");

1

使用此方法会有性能影响,请参考Alex的回答。 - user212218

1
我知道我即将发布的答案已经过期了,但它可能会帮助遇到相同问题的人。对于我的情况,我使用了:
SELECT * 
FROM tablename 
WHERE dateCol >= date("2017-11-01") 
AND dateCol < date("2017-11-01") + INTERVAL 1 DAY;

使用它比使用DATE()函数更快。

如果您正在使用存储过程,您可以将日期作为字符串传递,并在("2017-11-01")的位置提供它作为参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接