根据当前时间段更新MySQL中的日期的方法?

时间:2014-01-10 20:28:37

标签: mysql sql

假设我有一个带有单个日期列的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)。

  • 如果日期< 4,更新到当月的第5天
  • 如果4> =天< 9,更新到当月的第10天
  • 如果9> =天< 14,更新至当月的第15天
  • 如果14> =天< 19,更新到当月的第20天
  • 如果19> =天< 24,更新到当月25日
  • 如果24> =天< 29,更新到下个月的第一天
  • 如果日期> = 29,则更新到下个月的第5天

在我的示例表中,运行所述查询后,新表将如下所示:

ID | dates
----------
1  | 2014-01-05
2  | 2014-01-05
3  | 2014-01-05
4  | 2013-01-04
5  | 2013-01-05

我试图在不使用PHP之类的编程语言的情况下完成此任务(如果可能的话)。

1 个答案:

答案 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();