gpt4 book ai didi

mysql - 如何根据当前时间段更新MySQL中的日期?

转载 作者:行者123 更新时间:2023-11-29 08:13:38 24 4
gpt4 key购买 nike

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

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

...

基本上,我想创建一个查询来检查以下内容:今天之前表中的任何日期(对于本例,我们假设它是 2014 年 1 月 1 日),如果找到日期(在此情况 1,2,3),根据以下逻辑更新该日期:

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

  • 如果第 < 4 天,则更新为当月 5 日
  • 如果 4 >= 天 < 9,则更新为当月 10 日
  • 如果 9 >= 天 < 14,则更新为当月 15 日
  • 如果 14 >= 天 < 19,则更新为当月 20 日
  • 如果 19 >= 天 < 24,则更新为当月 25 日
  • 如果 24 >= 天 < 29,则更新到下个月的 1 号
  • 如果 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 之类的编程语言(如果可能的话)的情况下完成此任务。

最佳答案

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

关于mysql - 如何根据当前时间段更新MySQL中的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21053802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com