我有一个包含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
答案 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'