我需要在where子句中使用9月1日,并且不希望对年份进行硬编码。什么是返回9/1 /年以在两者之间使用的最佳方式?mysql每年的同一天
where p.post_date between '2016-09-01' and DATE_ADD(CURDATE(),INTERVAL 1 DAY)
寻找“2016-09-01”的替代品,以便它在明年和未来再次发挥作用。此外,需要为同年的十月,十月和十月工作。
我需要在where子句中使用9月1日,并且不希望对年份进行硬编码。什么是返回9/1 /年以在两者之间使用的最佳方式?mysql每年的同一天
where p.post_date between '2016-09-01' and DATE_ADD(CURDATE(),INTERVAL 1 DAY)
寻找“2016-09-01”的替代品,以便它在明年和未来再次发挥作用。此外,需要为同年的十月,十月和十月工作。
基本上,你想上年当你当你转动日后在本年度的转折日期和当前一个之前。
我建议告诉MySQL你正在使用什么日期格式,这样做,你可以使用STR_TO_DATE
函数。
CASE
WHEN MONTH(CURDATE()) < 9 THEN STR_TO_DATE(CONCAT(YEAR(CURDATE())-1, '-09-01'), '%Y-%m-%d')
ELSE STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-09-01', '%Y-%m-%d'))
END
你可以把它放在函数/例程中,并在需要的地方使用它。
就是这样!谢谢。最终溶液:CASE 其中p.post_date之间 WHEN MONTH(CURDATE())<9 THEN STR_TO_DATE(CONCAT(YEAR(CURDATE()) - 1, ' - 09', ' - 01'),“%Y- %0%(%d%) ELSE STR_TO_DATE(CONCAT(YEAR(CURDATE()),' - 09',' - 01'),'%Y-%m-%d')END 和DATE_ADD(CURDATE() ,INTERVAL 1天) – SJ14420
我想你想获得本年度的year/09/01
?
SELECT *
FROM YourTable
WHERE datecol = CONCAT (YEAR(CURDATE()) , '/09/01')
几乎...有时它会是年减1。 像现在一样,报告期为2016年9月1日至今天。报告期将于明年9月1日重新开始。 – SJ14420
你能告诉我们'语句之间'吗?向我们展示数据库模式,样本数据和预期输出。 \t请阅读[**如何提问**](http://stackoverflow.com/help/how-to-ask) \t \t这里是一个伟大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)来了解如何提高您的问题质量并获得更好的答案。 –
其中p.post_date位于'2016-09-01'和DATE_ADD(CURDATE(),INTERVAL 1天)之间 正在寻找“2016-09-01”的替代品,以便明年和未来再次运行。 – SJ14420