我有一个mysql DB,它有一个名为date的TIMESTAMP字段。如何选择月份为当月的所有字段?
提前致谢!
答案 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的角度来看,它是非常友好和直接的。
答案 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中这个月的时间戳字段的所有记录