我应该如何在MySQL中过滤日期?

Dis*_*oat 2 php mysql datetime

我正在创建一组按年和月指定的"存档"页面.在我的表中,我有一个datetime叫做的字段posted.我想选择特定月份的所有行.

我想到了两个解决方案:

(1)使用字符串匹配:

SELECT ... WHERE posted LIKE '2009-06%'
Run Code Online (Sandbox Code Playgroud)

(2)使用一些MySQL提取函数:

SELECT ... WHERE YEAR(posted)=2009 AND MONTH(posted)=6
Run Code Online (Sandbox Code Playgroud)

哪一个会更快,有没有更好的解决方案?

Qua*_*noi 7

SELECT   *
WHERE    posted >= '2009-06-01'
         AND posted < '2009-07-01'
Run Code Online (Sandbox Code Playgroud)

posted与您的查询不同,这个将有效地使用索引.

请注意,如果您保留posted为a VARCHAR,则以下查询:

SELECT ... WHERE posted LIKE '2009-06%'
Run Code Online (Sandbox Code Playgroud)

也会使用索引.