从timestamp列中选择当前月份记录mysql

rod*_*lla 13 mysql timestamp

我有一个mysql DB,它有一个标题为date的TIMESTAMP字段.如何选择月份为当月的所有字段?

提前致谢!

pet*_*erm 23

UPDATE

一种更好的索引友好方式,可以查询一系列日期的数据

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);
Run Code Online (Sandbox Code Playgroud)

**注意:**您不对列数据应用任何函数,而是在条件的右侧进行所有必要的计算(这些是常量,仅在诗人执行时进行评估).这样,您就可以让MySQL从timestampfield列上可能包含的索引中受益.

原始答案:

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
  FROM table1
 WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
   AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())
Run Code Online (Sandbox Code Playgroud)

注意:尽管此查询产生了正确的结果,但它实际上会使您对timestampfield列可能具有的索引的正确使用无效(这意味着MySQL将被强制执行fullscan)

这是SQLFiddle演示


Bha*_*tel 7

使用此查询可能对您有所帮助,

Query = "SELECT * FROM <table_name> WHERE MONTH(date_entered) = MONTH(CURDATE())";
Run Code Online (Sandbox Code Playgroud)

  • 这将获得具有匹配月份值的任何行,即使其年份不同。 (2认同)
  • 是的,它会为您提供差异年份的记录,如果您想指定当前年份,只需添加该年份的运算符和条件,如下所示: SELECT * FROM &lt;table_name&gt; WHERE MONTH(created_at) = MONTH(CURDATE() ) AND YEAR(created_at) = YEAR(CURDATE()) (2认同)

mus*_*n3d 6

在我看来,以下内容比接受的答案更具可读性......

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
FROM table1
WHERE timestampfield >= DATE_FORMAT(NOW(), '%Y-%m-01')
Run Code Online (Sandbox Code Playgroud)

注意:这也会选择下个月的任何记录。这通常并不重要,因为还没有创建任何东西。