153

我有一个包含日期时间列的表。无论时间如何,我都希望返回给定日期的所有记录。或者换句话说,如果我的表只包含以下 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

4 回答 4

376

永远不要使用像这样的选择器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'

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

于 2012-12-31T17:24:07.770 回答
40

... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'可能比DATE.

于 2012-12-31T17:23:13.433 回答
29

您可以使用%

SELECT * FROM datetable WHERE datecol LIKE '2012-12-25%'
于 2014-05-23T13:35:14.007 回答
1

SELECT * FROM tablewhere Date(col) = 'date'

于 2020-08-10T06:56:26.907 回答