Кажется, это то, что вы хотите. Вы можете использовать рекурсивный CTE и игнорировать эту таблицу, чтобы сделать это в течение нескольких лет ...
declare @quarters table (QID int, QuarterName varchar(64), StartMonth int, StartDay int, EndMonth int, EndDay int)
insert into @quarters
values
(1,'First Quarter',10,1,12,31),
(2,'Second Quarter',1,1,3,31),
(3,'Third Quarter',4,1,6,30),
(4,'Fourth Quarter',7,1,9,30)
declare @year int = '2018'
select
*
,convert(varchar,convert(date,cast(@year as varchar) + right('0' + cast(EndMonth as varchar),2) + cast(EndDay as varchar)),101)
from @quarters
Или рекурсивный CTE ...
;with cte as(
select
*
,EndDate = convert(date,convert(date,cast(datepart(year,@startDate) as varchar) + right('0' + cast(EndMonth as varchar),2) + cast(EndDay as varchar)))
from @quarters
union all
select
Qid
,QuarterName
,StartMonth
,StartDay
,EndMonth
,EndDay
,dateadd(year,1,EndDate)
from cte
where datepart(year,EndDate) <= datepart(year,@endDate)
)
select
Qid
,QuarterName
,StartMonth
,StartDay
,EndMonth
,EndDay
,EndDate = convert(varchar,EndDate,101)
from cte