如何在mysql和php中计算多个日期之间的天数?
我在mysql中有一个表,其中包含如何在mysql和php中计算多个日期之间的天数?,php,mysql,Php,Mysql,我在mysql中有一个表,其中包含start\u date,end\u date和id,如下所示 start_date end_date id --------------------------------------------- 2018-01-01 2018-01-01 5 2018-01-03 2018-01-03 5 2018-01-03 2018-01-08 5 2018-01-06 2018-01-07 7 2018-01-07 2
start\u date
,end\u date
和id
,如下所示
start_date end_date id
---------------------------------------------
2018-01-01 2018-01-01 5
2018-01-03 2018-01-03 5
2018-01-03 2018-01-08 5
2018-01-06 2018-01-07 7
2018-01-07 2018-01-07 7
2018-01-09 2018-01-11 7
2018-01-02 2018-01-02 8
2018-01-02 2018-01-04 8
2018-01-08 2018-01-08 9
我希望在mysql中输出id like的总天数
total_days id
-------------------------
7 5
5 7
3 8
1 9
特定ID的日期之间存在日差。请检查每个id的开始和结束日期。我认为需要将所有日期放在一个序列中,然后计算从第一个到下一个的天数。我不知道怎么做<代码>2018-01-08至2018-01-08
应为一天<代码>2018-01-08至2018-01-09
应为2天,而非1天。
请帮忙。
程序正在用php开发。您正在寻找DATEDIFF函数: MS SQL SERVER: MYSQL: 演示小提琴: Datediff文档MS SQL Server:
Datediff文档MYSQL:Datediff函数在输出中支持加号和减号:
SELECT DATEDIFF(start_date, end_date) + 1
选择不同的id,从表名称中将(开始日期-结束日期)计数为“总天数”我发现在硬核mysql中不可能实现此解决方案。我需要用编程语言来做。由于我使用PHP开发软件,所以我使用PHP代码计算天数。我对所有日期逐个排序,然后计算每个日期之间的天数。
感谢所有回答我问题的人。但此函数仅计算从开始到结束的天数。第行中有重复的日期。所以日子会变得重复。@BahirjiNaik你做错了什么事。。。看看我放在answerDATEDIFF(day,start_date,end_date)中的演示小提琴,它是sqlserver,mysql等价物是DATEDIFF(start_date,end_date),谢谢你的帮助。。但当差异超过1天时,此查询将失败。意思是当空日超过2天时。@BahirjiNaik你这是什么意思?你能举例说明你在说什么吗。。由于此表在
start\u date
中包含重复的日期,天数将变得重复。您可以添加一些说明如果检查,日期将重叠。它将在两天内重叠。请参见。。由于此表在start\u date
中包含重复的日期,天数将变得重复。使用纯sqlSelect DATEDIFF(start\u date,end\u date)无法找到日期重叠;请参阅,不要忘记识别主键。感谢您提供此代码段,它可能会提供一些有限的即时帮助。一个恰当的解释将通过说明为什么这是一个很好的问题解决方案而大大提高它的长期价值,并将使它对未来有其他类似问题的读者更有用。请编辑您的答案,添加一些解释,包括您所做的假设。
SELECT id, DATEDIFF(max(enddate), min(startdate)) + 1 FROM demo group by id;
SELECT DATEDIFF(start_date, end_date) + 1