我有MySQL条件,从现在开始x个月后抓住时间间隔。通常,这将设置为13个月,因此您可以将当前月份与去年相比较。
'created > DATE_SUB(now(), INTERVAL ' . $timeInterval . ' MONTH)'
因此,例如去年1月与今年1月相比,但我希望包括前几年的所有月份。因此,2015年1月20日到2016年1月20日,我将从2015年1月1日到今年1月的当前日期,直到2月1日。
答案 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')