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

时间:2011-07-11 04:03:29

标签: mysql sql

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

连接呈现yearmonth列的索引无用。

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

答案 1 :(得分:2)

好吧,我有同样的问题,我已经想到了我认为这个案例的解决方案。

SELECT * 
FROM table
WHERE (month >= (month(curdate()) - 3 AND year >= year(curdate())) 
      AND (month >= month(curdate()) AND year >= year(curdate())))

假设您有名为年和月的列。