计算每年开始和结束日期之间的天数

Posted

技术标签:

【中文标题】计算每年开始和结束日期之间的天数【英文标题】:Calculate duration in days between start and end date for each year 【发布时间】:2019-04-11 13:08:27 【问题描述】:

我正在尝试计算不同年份的持续时间,其中:

startdate     enddate       duration (days)
2016-09-20    2018-09-20    730

我希望将以下结果连续作为每年的持续时间, 以年份作为列名,以日期作为结果:

2016 = 103 天 - 2017 = 365 天 - 2018 = 263 天

除了使用 DATEDIFF 并输入每年的结束日期外,我找不到具体的解决方案,但这并不能计算未来几年的剩余天数。谁能帮我找到 mysql 的解决方案?

【问题讨论】:

这应该是一个仅使用 SQL 的解决方案(这将使得每个数据库行每年返回一行变得困难)? 我希望它在同一行,感谢您的注意。我会编辑我的帖子。 f 那么,您想动态生成这些列吗? 选择语句中的新列 编写生成不同行数的查询很容易。使用不同数量的列编写查询很尴尬。您可以将数据透视留给表示层(应用程序或报表)吗? 【参考方案1】:

假设(希望)您有一个数字表,您可以进行以下计算:

SELECT startdate,
       enddate,
       number AS year_num,
       DATEDIFF(
              LEAST(DATE(CONCAT(number, '-12-31')), enddate),
           GREATEST(DATE(CONCAT(number, '-01-01')), startdate)
       ) + 1 AS num_days
FROM t
INNER JOIN (
    SELECT 2010 AS number UNION ALL
    SELECT 2011 UNION ALL
    SELECT 2012 UNION ALL
    SELECT 2013 UNION ALL
    SELECT 2014 UNION ALL
    SELECT 2015 UNION ALL
    SELECT 2016 UNION ALL
    SELECT 2017 UNION ALL
    SELECT 2018 UNION ALL
    SELECT 2019
) AS numbers ON number BETWEEN YEAR(startdate) AND YEAR(enddate)

【讨论】:

以上是关于计算每年开始和结束日期之间的天数的主要内容,如果未能解决你的问题,请参考以下文章

js 怎么计算 开始日期(2011-02-22)+天数(3)=结束日期(2011-02-24)

如何用excel计算两个日期之间相差的年数和月数

js怎么计算开始日期与结束日期之间的时间

js计算两个日期间的所有日期

如何计算两个日期之间的天数? [复制]

如何计算两个日期之间的天数