MySQL SELECT WHERE datetime匹配一天(而不一定是时间)

我有一个包含date时间列的表。 无论何时,我都希望返回给定date的所有logging。 换句话说,如果我的表只包含以下4条logging,那么如果我限制在2012-12-25,那么只有第二条和第三条logging会被返回。

2012-12-24 00:00:00 2012-12-25 00:00:00 2012-12-25 06:00:00 2012-12-26 05:00:00 

永远不要使用类似DATE(datecolumns) = '2012-12-24'的select器 – 这是一个性能杀手:

  • 它会计算所有行的DATE() ,包括那些不匹配的行
  • 这将使得不可能为查询使用索引

使用起来要快得多

 SELECT * FROM tablename WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59' 

因为这将允许索引使用而不计算。

编辑

正如Used_By_Already指出的那样,自2012年初始回答以来,已经出现了MySQL的版本,其中使用“23:59:59”作为date终点不再安全。 应该阅读更新的版本

 SELECT * FROM tablename WHERE columname >='2012-12-25 00:00:00' AND columname <'2012-12-26 00:00:00' 

答案的要点,即避免一个计算expression式的select器,当然依然存在。

... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'可能会更好地工作(如果您有date_column上的索引)比DATE

你可以使用%

 SELECT * FROM datetable WHERE datecol LIKE '2012-12-25%'