我有一个 mysql 数据库,它有一个名为日期的 TIMESTAMP 字段。如何选择月份为当前月份的所有字段?
提前致谢!
更新
一种更好的索引友好方式来查询日期范围内的数据
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);
注意: 您不对列数据应用任何函数,而是在条件的右侧进行所有必要的计算(这些是常量,仅在执行后评估一次)。timestampfield
通过这种方式,您可以让 MySQL 从您可能在列上拥有的索引中受益。
原答案:
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演示
使用此查询可能会对您有所帮助,
Query = "SELECT * FROM <table_name> WHERE MONTH(date_entered) = MONTH(CURDATE())";
如果要使用索引,请不要对列应用任何函数:
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
在我看来,以下内容比接受的答案更具可读性......
SELECT id, FROM_UNIXTIME(timestampfield) timestamp
FROM table1
WHERE timestampfield >= DATE_FORMAT(NOW(), '%Y-%m-01')
注意:这也会选择下个月的任何记录。这通常无关紧要,因为尚未创建任何内容。
尝试这个
SELECT * FROM table WHERE month(data) = EXTRACT(month FROM (NOW()))
SELECT 'data of your choice '
FROM 'your table'
WHERE
MONTH'datecolumn'=MONTH(CURRENT_DATE )
用您的数据库中的适当替换“”中的文本
SELECT [columns]
FROM [the_table]
WHERE MONTH([date_column]) = MONTH(CURDATE())
用您的数据替换 [](包括 [])之间的文本。
下面的查询可以从索引中受益,并且没有函数应用于 where 子句评估的时间戳字段。
SELECT *
FROM TableName
WHERE TimestampField >=
(CURDATE() - INTERVAL (DAY(CURDATE())-1) DAY)
AND TimestampField <
LAST_DAY(CURDATE()) + INTERVAL 1 DAY;
如果您的时间戳字段是时间部分被截断,请选择这个,
SELECT *
FROM TableName
WHERE TimestampField BETWEEN
(CURDATE() - INTERVAL (DAY(CURDATE())-1) DAY)
AND
LAST_DAY(CURDATE());
从 2020 年开始,您可以从一开始就使用 BETWEEN 处理查询。
SELECT *
FROM [TABLE]
WHERE [DATE_FIELD]
BETWEEN
CAST('2020-30-01' AS DATE) AND CAST('2020-10-31' AS DATE);
我知道这不是最“自动”的方式,但从 SQL 的角度来看,它非常友好和直接。
试试这个,因为它的范围会更好。您不需要为每一行计算月份和年份。它会减慢这个过程。用户范围以获得更好的性能。
SELECT * FROM table WHERE columnName between DATE_FORMAT(current_date() ,'%Y-%m-01') and current_date();
我认为在 MySQL 中,这是我尝试过并且效果很好的最简单方法,您想选择timestampfield
本月所在的行。
SELECT * FROM your_table
WHERE MONTH(timestampfield)=MONTH(CURRENT_DATE()) AND
YEAR(timestampfield)=YEAR(CURRENT_DATE());
以上将返回mysql中该月timestampfield是本月的所有记录