gpt4 book ai didi

php - 如何在日期列上添加 MySQL 中的天数?

转载 作者:行者123 更新时间:2023-11-29 02:43:02 25 4
gpt4 key购买 nike

我在数据库中有一个简单的表。该表有 date_startadded_days 列。这是带有普通 SELECT 的表:

id    date_start    added_days
1 2017-10-10 2
2 2017-10-10 4
3 2017-10-10 6
4 2017-10-10 6
5 2017-10-10 3

我知道如何将天数添加到 date_start 列。但是,如何让date_start的值和之前的date_start一样呢?

我当前的SELECT:

SELECT DATE_ADD(date_start, INTERVAL added_days DAY) AS 'new_date',added_days FROM test

id      new_date    added_days
1 2017-10-12 2
2 2017-10-14 4
3 2017-10-16 6
4 2017-10-16 6
5 2017-10-13 3

我的预期输出:

id      new_date    added_days
1 2017-10-10 2
2 2017-10-12 4
3 2017-10-16 6
4 2017-10-22 6
5 2017-10-28 3

fiddle

注意:
我也接受 PHP 解决方案,如果它在 MySQL 中是不可能的

最佳答案

概念可以用同样的方式来做this answer needed .我像在线程序一样使用 MySQL 变量。

select
@lastDate := date_add( if( @lastNumDays = 0, date_start, @lastDate ), INTERVAL @lastNumDays DAY ) as new_Date,
@lastNumDays := added_days as added_days
from
YourTable ,
( select @lastDate := '2017-01-01',
@lastNumDays := 0 ) SQLVars;

“SQLVARS”别名用于内联创建变量...一个伪造的占位符日期,最后的天数默认为 0,因此实际上没有添加任何天数。

选择字段将使用 -- 在第一次传递实际的第一个日期时,将零天添加到它作为开始,然后将该值设置到 @lastDate 变量中以用于下一条记录。 NEXT 字段将天数分配给 @lastNumDays 变量,用于下一条记录的“Date_Add()”过程。

我的工作解决方案可以在 SQL Fiddle demo 找到

澄清。

两个变量保存“最后日期”,一个保存当前记录之后的天数。因此,为了按顺序处理行,可以将其视为...

@lastDate = '2017-01-01' -- 仅充当占位符声明变量@lastNumDays = 0 -- 另一个用于后续添加到基准日期的占位符

第一个记录,应用了 IF(),@lastNumDays = 0,因此它将“Date_Start”放入@lastDate 变量但变成了“New_Date”列。接下来,获取 added_Days 并存储到@lastNumDays 变量中,成为“added_Days”列。

因此在根据您的示例数据处理的第一行的末尾,

@lastDate = '2017-10-10' and
@lastNumDays = 2

现在,我们进入数据的第二行。IF() 在@lastNumDays 中有一个值并使用@lastDate 代替并向其添加2 天。所以现在

@lastDate = '2017-10-12'
@lastNumDays = 4

下一条记录...将添加的 4 天应用于 10/12 日期并变为

@lastDate = '2017-10-16'
@lastNumDays = 6

等.. 现在,你有一个固定的开始日期列值的事实可以通过预先定义该列作为起点来简化,但我对你的环境,临时/永久的了解不够表等进行调用,足以获得您正在寻找的答案。

关于php - 如何在日期列上添加 MySQL 中的天数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47503134/

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