MySQL年间隔,包括上一年的整个月份

时间:2016-01-27 20:52:37

标签: mysql sql date

我有MySQL条件,从现在开始x个月后抓住时间间隔。通常,这将设置为13个月,因此您可以将当前月份与去年相比较。

'created > DATE_SUB(now(), INTERVAL ' . $timeInterval . ' MONTH)'

因此,例如去年1月与今年1月相比,但我希望包括前几年的所有月份。因此,2015年1月20日到2016年1月20日,我将从2015年1月1日到今年1月的当前日期,直到2月1日。

2 个答案:

答案 0 :(得分:1)

我会使用DATE_FORMAT来快速轻松地将日期的“日期”部分替换为常量。然后减去你的月数...

... t.created > DATE_FORMAT(NOW(),'%Y-%m-01') - INTERVAL ? MONTH

作为该表达式返回内容的演示,我们可以使用简单的SELECT语句对其进行测试:

SELECT NOW(), DATE_FORMAT(NOW(),'%Y-%m-01') - INTERVAL 12 MONTH

NOW()                DATE_FORMAT(NOW(),'%Y-%m-01') - INTERVAL 12 MONTH  
-------------------  -------------------------------------------------
2016-01-27 21:01:02  2015-01-01   

<强>后续

您确定要进行“大于”比较,而不是“大于或等于”比较 >= 吗?

还有其他方法可以生成要比较的日期值。您可以使用DATE(NOW())CURDATE()返回当前日期,但不包含时间组件。

使用DAY()函数获取当前日期的数值,然后将该值减去(减去1)作为天数。例如,像这样:

 >= DATE(NOW()) - INTERVAL DAY(NOW())-1 DAY - INTERVAL 12 MONTH

这看起来更混乱,更复杂。我认为在'-01'作为日期部分理解填充更容易。

答案 1 :(得分:0)

created > str_to_date(concat(year(now())-1, '-01-01'), '%Y-%m-%d')

或者,如果您不需要前一年:

select str_to_date(concat(year(now())-1, '-', month(now()),'-01'), '%Y-%m-%d')