Mysql 获取年和月列之间的日期分割之间的行

Pet*_*tah 2 mysql sql

我有一个表,其中不同的列中有年份和月份,我需要找到 3 个月前到现在的所有行。

SELECT * FROM `table` 
 WHERE DATE(CONCAT(`year`, '-', `month`, '-01')) >= 
          DATE_FORMAT(NOW() - INTERVAL 3 MONTH, '%Y-%m-01')
Run Code Online (Sandbox Code Playgroud)

它看起来相当冗长,并且可能效率低下,因为这是一个非常大的表。有一个更好的方法吗?

OMG*_*ies 5

当日期存储为单独的字段时,没有太多优化,但我会将您的查询重写为:

SELECT * 
  FROM `table` 
 WHERE STR_TO_DATE(`year`+ '-'+ `month` + '-01', '%Y-%m-%d') >= DATE_SUB(NOW(), INTERVAL 3 MONTH)
Run Code Online (Sandbox Code Playgroud)

year连接使得和列上的索引month毫无用处。

有关 MySQL 日期函数的更多信息,请参阅:http ://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html