use*_*531 118 mysql select date
我有一个包含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
Run Code Online (Sandbox Code Playgroud)
Eug*_*eck 304
永远不要使用像这样的选择器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'
Run Code Online (Sandbox Code Playgroud)
因为这将允许索引使用而无需计算.
编辑
正如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'
Run Code Online (Sandbox Code Playgroud)
答案的要点,即避免计算表达式上的选择器,当然仍然有效.
a1e*_*x07 31
... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'可能更好地工作(如果你有date_column上的索引)比DATE.
Ghi*_*ADJ 19
你可以使用%:
SELECT * FROM datetable WHERE datecol LIKE '2012-12-25%'
Run Code Online (Sandbox Code Playgroud)