我正在创建一组按年和月指定的“存档”页面。在我的表格中,我有一个名为datetime
的{{1}}字段。我想选择特定月份的所有行。
我想到了两个解决方案:
(1)使用字符串匹配:
posted
(2)使用一些MySQL提取函数:
SELECT ... WHERE posted LIKE '2009-06%'
其中哪一项会更快,哪有更好的解决方案?
答案 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“。