mysql每年的同一天

时间:2017-04-03 14:48:50

标签: mysql sql

我需要在where子句中使用9月1日,并且不想对年份进行硬编码。什么是最好的方式返回9/1 /年用于声明之间?

where p.post_date between '2016-09-01' and DATE_ADD(CURDATE(),INTERVAL 1 DAY) 

寻找替换2016-09-01'所以它明年再次运作并继续前进。此外,需要为同年的oct,nov和dec工作。

3 个答案:

答案 0 :(得分:2)

您可以使用month()day()

select t.*
from t
where month(datecol) = 9 and day(datecol) = 1;

答案 1 :(得分:1)

我想你想得到当年的year/09/01

 SELECT *
 FROM YourTable
 WHERE datecol = CONCAT ( YEAR(CURDATE()) , '/09/01')

答案 2 :(得分:0)

基本上,您需要前一年当您在当前年度的转折日期之前,而当前一年当您在转折日期之后。

我建议告诉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

你可以把它放在一个函数/例程中,并在任何需要的地方使用它。