MySQL SELECT WHERE datetime匹配一天(而不一定是时间)
我有一个包含date时间列的表。 无论何时,我都希望返回给定date的所有logging。 换句话说,如果我的表只包含以下4条logging,那么如果我限制在2012-12-25,那么只有第二条和第三条logging会被返回。
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'
的select器 – 这是一个性能杀手:
- 它会计算所有行的
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”作为date终点不再安全。 应该阅读更新的版本
SELECT * FROM tablename WHERE columname >='2012-12-25 00:00:00' AND columname <'2012-12-26 00:00:00'
答案的要点,即避免一个计算expression式的select器,当然依然存在。
... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'
可能会更好地工作(如果您有date_column上的索引)比DATE
。
你可以使用%
:
SELECT * FROM datetable WHERE datecol LIKE '2012-12-25%'