一尘不染

从时间戳列中选择当前月份记录mysql

mysql

我有一个mysql数据库,其中有一个TIMESTAMP字段,标题为date。如何选择月份为当前月份的所有字段?

提前致谢!


阅读 358

收藏
2020-05-17

共1个答案

一尘不染

更新

一种更好的索引友好型查询日期范围内数据的方法

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
  FROM table1
 WHERE timestampfield >= UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH)
   AND timestampfield <  UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY);

注意:
您不对列数据应用任何函数,而是在条件的右侧进行所有必要的计算(它们是常量,并且仅在执行后评估一次)。这样,您就可以使MySQL受益于该timestampfield列上可能具有的索引。

原始答案:

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
  FROM table1
 WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
   AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())

注意:
尽管此查询产生正确的结果,但实际上使您可能在timestampfield列上使用的索引的正确使用无效(这意味着MySQL将被强制执行全扫描)

这是 SQLFiddle 演示

2020-05-17