我在编译一条查询时遇到了一些问题,需要实现以下功能:
- 我有一个表格,其中包含一个startDate和一个endDate [tblPayments]
- 我有一个列存储特定的paymentDay [tblPayments]
数据
paymentID startDate endDate paymentDay
1 2016-01-01 2016-12-31 25
2 2015-06-01 2016-06-30 16
我正试图生成一个
SELECT
查询,它将根据这两个日期之间的月数将此特定表拆分为单独的行,并将paymentDay设置为这些查询的日期。
示例输出:
paymentID expectedDate
1 2016-01-25
1 2016-02-25
1 2016-03-25
1 2016-04-25
1 2016-05-25
1 2016-06-25
1 2016-07-25
1 2016-08-25
1 2016-09-25
1 2016-10-25
1 2016-11-25
1 2016-12-25
2 2015-06-16
2 2015-07-16
2 2015-08-16
2 2015-09-16
2 2015-10-16
2 2015-11-16
2 2015-12-16
2 2016-01-16
2 2016-02-16
2 2016-03-16
2 2016-04-16
2 2016-05-16
我找到了一个查询语句,可以选择这些日期之间的月份,但是我在适应我的上述表格、多个开始日期和结束日期方面遇到了困难。
拆分月份
declare @start DATE = '2015-01-01'
declare @end DATE = '2015-12-31'
;with months (date)
AS
(
SELECT @start
UNION ALL
SELECT DATEADD(MM,1,date)
from months
where DATEADD(MM,1,date)<=@end
)
select Datename(MM,date) from months
这个查询仅限于一个开始日期和结束日期,因此我没有将其扩展以更改日期的天数(DAY)。