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

时间:2009-06-16 17:15:56

标签: php mysql datetime

我正在创建一组按年和月指定的“存档”页面。在我的表格中,我有一个名为datetime的{​​{1}}字段。我想选择特定月份的所有行。

我想到了两个解决方案:

(1)使用字符串匹配:

posted

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

SELECT ... WHERE posted LIKE '2009-06%'

其中哪一项会更快,哪有更好的解决方案?

2 个答案:

答案 0 :(得分:7)

SELECT   *
WHERE    posted >= '2009-06-01'
         AND posted < '2009-07-01'

这个会有效地使用posted上的索引,与您的查询不同。

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

SELECT ... WHERE posted LIKE '2009-06%'

也会使用索引。

答案 1 :(得分:1)

忽略对此设计的保留,标准语法将是“BETWEEN first-date和last-date”,或者(如果您使用的是小于日期粒度),“已发布&gt; =首次发布且已发布&lt;最后日期+ 1“。