【发布时间】:2019-08-03 00:25:42
【问题描述】:
我有大量的日期范围如下,示例如下。我需要计算每个实际日历年有多少个月。所以这将分解为:
合同: 123
开始日期: 2016 年 1 月 11 日
结束日期: 01/06/2018
- 01/11/2016 > 31/12/2016 - 2016 年 2 个月
- 01/01/2017 > 31/12/2017 - 2017 年 12 个月
- 01/01/2018 > 01/06/2018 - 2018 年 6 个月
合同: 456
开始日期: 2017 年 5 月 31 日
结束日期: 01/06/2019
- 31/05/2017 > 31/12/2017 - 2017 年 6 个月
- 01/01/2018 > 31/12/2018 - 2018 年 12 个月
- 01/01/2019 > 01/06/2019 - 2019 年 6 个月
有人知道解决这个问题的方法吗?每个合同都有一行,都在同一个表中,并且开始和结束日期列在同一行中。
我原本打算走 CTE 路线,但这让我大吃一惊。
预期结果:
contract_id year number of months
123 2016 2
123 2017 12
123 2018 6
456 2017 6
456 2018 12
456 2019 6
或者类似的,我非常乐意修改我的原始查询,以纳入实现这一目标的最佳结果/方法。
表定义:
- contract_id: int
- 开始日期:日期时间
-
end_date:日期时间
contract_id start_date end_date 123 2016-01-11 00:00:00.000 2018-06-01 00:00:00.000 456 2017-05-31 00:00:00.000 2019-06-01 00:00:00.000
【问题讨论】:
-
你能发布你期望的输出吗?还要发布表定义?
-
@SeanLange 是的 - 抱歉,已添加到原始问题中。
-
你有一个数字表,即所有数字从 1 到(一个大值)的表吗?
-
另外,您使用的是什么 SQL Server 版本?
-
A的2016年怎么只有1个月? 11 月和 12 月?
标签: sql sql-server tsql sql-server-2016