从两个日期中选择,自动显示连续的行数据

问题描述 投票:0回答:1

我期望从两个日期中选择,自动显示连续时间行数据。

e.g:

Select * 
from somefunction('2013/5','2019/3');

预期结果:

Year | Month
-----+------
2013 |  5
2013 |  6
..   | ..
2013 | 12
..   | ..
..   | ..
2019 |  1
2019 |  2
2019 |  3
sql sql-server
1个回答
2
投票

我已经解决了问题,这里提供了解决方案。

declare @dStart datetime = '2013/05/01'
,@dEnd datetime = '2019/03/31';

SELECT year(Dateadd(month,number,@dStart)) as year,month(Dateadd(month,number,@dStart)) as month
FROM master..spt_values
WHERE 
    type = 'P'
    AND number <= DATEDIFF(month, @dStart, @dEnd)
GO
year | month
---: | ----:
2013 |     5
2013 |     6
2013 |     7
2013 |     8
2013 |     9
2013 |    10
2013 |    11
2013 |    12
2014 |     1
2014 |     2
2014 |     3
2014 |     4
2014 |     5
2014 |     6
2014 |     7
2014 |     8
2014 |     9
2014 |    10
2014 |    11
2014 |    12
2015 |     1
2015 |     2
2015 |     3
2015 |     4
2015 |     5
2015 |     6
2015 |     7
2015 |     8
2015 |     9
2015 |    10
2015 |    11
2015 |    12
2016 |     1
2016 |     2
2016 |     3
2016 |     4
2016 |     5
2016 |     6
2016 |     7
2016 |     8
2016 |     9
2016 |    10
2016 |    11
2016 |    12
2017 |     1
2017 |     2
2017 |     3
2017 |     4
2017 |     5
2017 |     6
2017 |     7
2017 |     8
2017 |     9
2017 |    10
2017 |    11
2017 |    12
2018 |     1
2018 |     2
2018 |     3
2018 |     4
2018 |     5
2018 |     6
2018 |     7
2018 |     8
2018 |     9
2018 |    10
2018 |    11
2018 |    12
2019 |     1
2019 |     2
2019 |     3

db <>小提琴here

© www.soinside.com 2019 - 2024. All rights reserved.