我有一个包含日期时间列的表。无论时间如何,我都希望返回给定日期的所有记录。或者换句话说,如果我的表只包含以下 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
永远不要使用像这样的选择器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'
答案的要点,即在计算表达式上避免选择器,当然仍然有效。
... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'
可能比DATE
.
您可以使用%
:
SELECT * FROM datetable WHERE datecol LIKE '2012-12-25%'
SELECT * FROM table
where Date(col) = 'date'