我有一堆带时间戳的行(使用’datetime’数据类型)
我想选择时间戳在特定月份内的所有行.
该列已编入索引,因此我无法执行MONTH(timestamp)= 3,因为这会使该索引无法使用.
如果我有年和月变量(在perl中),是否有一个可怕的sql我可以使用如下:
timestamp BETWEEN DATE($year,$month,0) AND DATE($year,31);
但更好,实际上有效吗?
最佳答案
我实际上会考虑你提出的想法;可能差别很小:
select *
from your_table
where date_field >= '2010-01-01'
and date_field < '2010-02-01'
(当然,由你决定使用$year和$month)
注意< '2010-02-01'部分:如果您有包含时间的日期,您可能需要考虑这一点.
例如,如果您的某一行的日期类似于“2010-01-31 12:53:12”,那么您可能希望选择该行 – 默认情况下,“2010-01-31”表示“2010” -01-31 00:00:00′.
也许这看起来并不“好看”;但它会起作用;并使用索引…当我遇到这种问题时,这是我经常使用的一种解决方案.