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

时间:2013-05-11 18:41:37

标签: mysql timestamp

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

提前致谢!

11 个答案:

答案 0 :(得分:22)

<强>更新

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

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 演示

答案 1 :(得分:6)

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

Query = "SELECT * FROM <table_name> WHERE MONTH(date_entered) = MONTH(CURDATE())";

答案 2 :(得分:2)

如果要使用索引,请不要对列应用任何函数:

SELECT * 
FROM tableX
WHERE `date` >= UNIX_TIMESTAMP((LAST_DAY(NOW())+INTERVAL 1 DAY)-INTERVAL 1 MONTH)
  AND `date` <  UNIX_TIMESTAMP(LAST_DAY(NOW())+INTERVAL 1 DAY) ;

使用的函数可以在MySQL文档中找到: Date and Time functions

答案 3 :(得分:2)

试试这个

SELECT * FROM table WHERE month(data) = EXTRACT(month FROM (NOW()))

答案 4 :(得分:2)

SELECT 'data of your choice '
FROM 'your table'
WHERE
MONTH'datecolumn'=MONTH(CURRENT_DATE )

替换&#39;中的文字&#39;适当的数据库

答案 5 :(得分:1)

SELECT [columns] 
FROM [the_table] 
WHERE MONTH([date_column]) = MONTH(CURDATE())

将[](包括[])之间的文字替换为您的数据。

答案 6 :(得分:0)

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

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

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

答案 7 :(得分:0)

下面的查询可以从索引中受益,并且没有将任何函数应用于timestamp字段以进行where子句评估。

SELECT * 
FROM TableName 
WHERE TimestampField >= 
           (CURDATE() - INTERVAL (DAY(CURDATE())-1) DAY) 
      AND TimestampField <  
           LAST_DAY(CURDATE()) + INTERVAL 1 DAY;

如果您的时间戳记字段是time part,则将其截断,

SELECT * 
FROM TableName 
WHERE TimestampField BETWEEN 
           (CURDATE() - INTERVAL (DAY(CURDATE())-1) DAY) 
         AND 
           LAST_DAY(CURDATE());

答案 8 :(得分:0)

从2020年开始,您可以从一开始就使用BETWEEN处理查询。

SELECT *
FROM [TABLE]
WHERE [DATE_FIELD] 
BETWEEN 
CAST('2020-30-01' AS DATE) AND CAST('2020-10-31' AS DATE);

我知道这不是最“自动”的方法,但是从SQL的角度来看,它是非常友好和直接的。

来源 https://www.techonthenet.com/mysql/between.php

答案 9 :(得分:0)

试试这个它会更好地工作,因为范围。您不需要为每一行计算月份和年份。它会减慢这个过程。用户范围以获得更好的性能。

SELECT * FROM table WHERE columnName between DATE_FORMAT(current_date() ,'%Y-%m-01') and current_date();

答案 10 :(得分:-2)

我认为在MySQL中这是我尝试过的最简单的方法,并且你想要选择本月timestampfield所在的行。

SELECT * FROM your_table 
WHERE MONTH(timestampfield)=MONTH(CURRENT_DATE()) AND
YEAR(timestampfield)=YEAR(CURRENT_DATE());

以上将返回MySQL中这个月的时间戳字段的所有记录