我试图在TSQL中以半月付款周期为基础,以2周和3周的间隔填充表格。该表应该填充,
2 week date
2 week date
3 week date
2 week date
2 week date
3 week date
..根据我提供的第一个日期,随后在提供的最后一个日期增加2或3周。我应该能够提供开始日期和结束日期。它可能只是一大早,但却想不到一种优雅的方式来完成这项任务。有什么指针吗?
谢谢! 乔治
答案 0 :(得分:3)
WITH dates (d, n) AS
(
SELECT @mydate, 1
UNION ALL
SELECT DATEADD(week, CASE n % 3 WHEN 0 THEN 3 ELSE 2 END, d), n + 1
FROM dates
WHERE d < @enddate
)
INSERT
INTO mytable
SELECT d
FROM dates
OPTION (MAXRECURSION 0)
答案 1 :(得分:1)
Horrid蛮力方法 - 因为2,2,3难以循环,只需将其添加到临时表中,然后在最后过滤,只需要输入一些额外的条目 - 不是最有效但是如果你需要为了得到一个范围,然后它工作。
所以这里需要注意的是:关闭一次,我不会在生产中使用:)
declare @start datetime
declare @end datetime
declare @calculated datetime
set @start = '20010101'
set @end = '20011231'
set @calculated = @start
Create Table #Dates (PayDate datetime)
while @calculated <= @end
begin
set @calculated = DateAdd(wk,2,@calculated)
insert into #Dates(paydate) values (@calculated)
set @calculated = DateAdd(wk,2,@calculated)
insert into #Dates(paydate) values (@calculated)
set @calculated = DateAdd(wk,3,@calculated)
insert into #Dates(paydate) values (@calculated)
end
select * from #Dates where paydate >= @start and paydate <= @end
drop table #dates
答案 2 :(得分:0)
所以你有一个7周的周期 - 找出你从一个已知的起点开始的7周时间,然后是你这7组中的哪一周。