【问题标题】:Method to update date in MySQL based on current time period?根据当前时间段在 MySQL 中更新日期的方法?
【发布时间】:2014-01-11 04:47:31
【问题描述】:

假设我有一个带有单个日期列的 MySQL 表:

ID | dates
----------
1  | 2013-12-30
2  | 2013-12-30
3  | 2013-12-31
4  | 2013-01-04
5  | 2013-01-05

...

基本上,我想创建一个查询来检查以下内容:如果找到日期(在此case 1,2,3),根据以下逻辑更新该日期:

(天是今天的实际数字,因此 01-01-2014 将是 1)。

  • 如果日期
  • 如果 4 >= day
  • 如果 9 >= day
  • 如果 14 >= day
  • 如果 19 >= day
  • 如果 24 >= day
  • 如果 day >= 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 之类的编程语言(如果可能的话)的情况下完成此操作。

【问题讨论】:

  • 检查你的不等式,它们似乎是错误的/颠倒的。
  • @peter.petrov - 你是对的。抱歉,已修复。

标签: mysql sql


【解决方案1】:

您可以使用 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();

【讨论】:

  • 太棒了 - 从来不知道 makedate 函数。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 2020-04-21
相关资源
最近更新 更多