MySQL SELECT WHERE datetime匹配日期(不一定是时间)

时间:2012-12-31 17:19:14

标签: mysql date select

我有一个包含datetime列的表。无论时间如何,我希望返回给定日期的所有记录。或者换句话说,如果我的表只包含以下4条记录,那么如果我限制在2012-12-25,则只返回第2和第3条。

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

4 个答案:

答案 0 :(得分:284)

永远不会使用像DATE(datecolumns) = '2012-12-24'这样的选择器 - 它是性能杀手:

  • 它将为所有行计算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'作为日终不再安全。更新版本应为

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

答案的要点,即避免使用计算表达式的选择器,当然仍然有效。

答案 1 :(得分:30)

... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'可能比DATE更有效(如果你有date_column的索引)。

答案 2 :(得分:18)

您可以使用%

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

答案 3 :(得分:-1)

SELECT * FROM table,其中Date(col)='date'