如果仅按日期选择,则将计算基于
CURDATE(仅返回日期)而不是
NOW(返回日期和时间)。这些示例将捕获日期范围内的所有时间:
- 今天:
WHERe timestamp >= CURDATE()
- 昨天:
WHERe timestamp >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND timestamp < CURDATE()
- 这个月:
WHERe timestamp >= DATE_SUB(CURDATE(), INTERVAL DAYOFMonTH(CURDATE())-1 DAY)
- 在2013年6月3日至2013年6月7日这两个日期之间(请注意如何将结束日期指定为6月8日,而不是6月7日):
WHERe timestamp >= '2013-06-03' AND timestamp < '2013-06-08'
“本周”取决于您开始一周的哪一天;我留给你。您可以使用该
DAYOFWEEK功能调整
CURDATE()到适当的范围。
附录
:OP的列类型为
INTEGER,存储UNIX时间戳,而我的回答假定列类型为
TIMESTAMP。这是使用UNIX时间戳记值执行所有相同操作并在索引建立索引后仍然保持优化的方法(就像上面的答案在
TIMESTAMP索引建立索引时一样)…
基本上,解决方案是将开始日期和/或结束日期包装在
UNIX_TIMESTAMP函数中:
- 今天:
WHERe timestamp >= UNIX_TIMESTAMP(CURDATE())
- 昨天:
WHERe timestamp >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AND timestamp < UNIX_TIMESTAMP(CURDATE())
- 这个月:
WHERe timestamp >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL DAYOFMonTH(CURDATE())-1 DAY))
- 在2013年6月3日至2013年6月7日这两个日期之间(请注意如何将结束日期指定为6月8日,而不是6月7日):
WHERe timestamp >= UNIX_TIMESTAMP('2013-06-03') AND timestamp < UNIX_TIMESTAMP('2013-06-08')



