列出范围之间的所有日期

时间:2016-07-06 20:01:20

标签: sql sql-server database

我以前见过这个问题,但无法得到有效的答案。

我有两列 - startyearendyear。我想创建一个开始和结束年份之间所有年份的列表。因此,如果该行的2010年startyear和2016年的endyear,我希望该列表显示2010年,2011年,2012年等。

我是否必须以某种方式获取所有行中最早的startyear和最新endyear

 SELECT StartYear, EndYear
 FROM TestYear

4 个答案:

答案 0 :(得分:3)

您可以使用递归$e = ORM::for_table('sys_taxdate')->find_one(2); $date = $e->get('taxdate'); $idate = $date; $its = strtotime($idate); $dd = date('Y-m-d', strtotime('+3 months', $its));

执行此操作
CTE

答案 1 :(得分:1)

在存储过程中尝试这样的事情。

SELECT * INTO #FileDates
FROM (SELECT distinct year(startyear) as year from filename ) 
SELECT * INTO #FileDates2
    FROM (SELECT distinct year(endyear) as year from filename ) 

select distinct year from #FileDate, #FileDate2

您也可以查看:http://www.sqlservercentral.com/stairway/119892/

答案 2 :(得分:1)

使用递归cte来执行此操作。

declare @startyear int = 2010; --or any other number or a select query
declare @endyear int = 2020; --or any other number or a select query
with years(yr) as 
(
 select @startyear
 union all
 select yr+1 from years where yr < @endyear
)
select * from years;

答案 3 :(得分:1)

示例数据

Declare @t Table (StartYear INT , EndYear INT)
INSERT INTO @t Values (2010 , 2011), (2012 , 2016);

<强>查询

WITH X AS (

Select MIN(StartYear) MinYear
      ,MAX(EndYear)   MaxYear
FROM @t
) 
Select TOP ((Select MaxYear FROM X) 
           - (Select MinYear FROM X) + 1)
    ROW_Number() Over (Order by (Select NULL)) 
    + (Select MinYear FROM X) -1 rn
FROM master..spt_values a 
         Cross Join master..spt_values b