假设我有一个带有单个日期列的MySQL表:
ID | dates
----------
1 | 2013-12-30
2 | 2013-12-30
3 | 2013-12-31
4 | 2013-01-04
5 | 2013-01-05
...
基本上我想创建一个检查以下内容的查询:是今天之前表格中的任何日期(对于这个例子,我们假设它是1-1-2014),如果找到了一个日期(在此情况1,2,3),根据以下逻辑更新该日期:
(日是今天的实际数字,所以01-01-2014将是1)。
在我的示例表中,运行所述查询后,新表将如下所示:
ID | dates
----------
1 | 2014-01-05
2 | 2014-01-05
3 | 2014-01-05
4 | 2013-01-04
5 | 2013-01-05
我试图在不使用PHP之类的编程语言的情况下完成此任务(如果可能的话)。
答案 0 :(得分:2)
您可以使用MySQL的日期函数执行此逻辑。我当前采用的方法是使用makdedate()
,它依赖于一年中的某一天。幸运的是,有一个函数可以返回这些信息。逻辑是采用当年的当前日期,减去当月的当前日期,并在月中添加您想要的日期。
update t
set date = (case when day(now()) < 4 then makedate(year(now()), dayofyear(now()) - day(now()) + 5)
when day(now()) < 9 then makedate(year(now()), dayofyear(now()) - day(now()) + 10)
when day(now()) < 14 then makedate(year(now()), dayofyear(now()) - day(now()) + 15)
when day(now()) < 19 then makedate(year(now()), dayofyear(now()) - day(now()) + 20)
when day(now()) < 24 then makedate(year(now()), dayofyear(now()) - day(now()) + 25)
when day(now()) < 29 then makedate(year(now()), dayofyear(now()) - day(now()) + 30)
else date_add(last_day(now(), interval 5 day)
end)
where t.dates < now();