mysql - 计算每年开始和结束日期之间的天数
问题描述
我正在尝试计算不同年份的持续时间,其中:
startdate enddate duration (days)
2016-09-20 2018-09-20 730
我希望在一行中将以下结果作为每年的持续时间,以年份作为列名,将天数作为结果:
2016 = 103 天 - 2017 = 365 天 - 2018 = 263 天
除了使用 DATEDIFF 并输入每年的结束日期外,我找不到具体的解决方案,但这并不能计算未来几年的剩余天数。任何人都可以帮助我找到使用 MySQL 的解决方案吗?
解决方案
假设(希望)您有一个数字表,您可以进行以下计算:
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)
推荐阅读
- python - Flasks - render_template 不渲染 html 页面
- c# - 扩展方法必须在非泛型静态类中定义错误 public static
- assembly - X86:如何将xmm0的下半部分设置为0,而不影响上半部分?
- python - Redisearch 前缀搜索始终返回最大 200 的多字段索引总数
- c - CS50 PSET4 拼写器无法释放内存
- c# - 在 C# 中保持状态标志(32 项以下)的最有效方法
- amazon-dynamodb - 使用 Flink 在 DynamoDB 表中聚合电影租赁信息
- r - 更新重复行中的单个值
- c++ - 如何在 Visual Studio C++ 中将年、月、日、时间转换为 UNIX 时间
- android - 如何从 PlacesAutocomplete 中的位置中选择值并将其存储在 TextFormField 中