我需要在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工作。
答案 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
你可以把它放在一个函数/例程中,并在任何需要的地方使用它。