TSQL选择2&每隔3周

时间:2010-01-15 14:25:11

标签: sql sql-server tsql

我试图在TSQL中以半月付款周期为基础,以2周和3周的间隔填充表格。该表应该填充,

2 week date
2 week date
3 week date
2 week date
2 week date
3 week date

..根据我提供的第一个日期,随后在提供的最后一个日期增加2或3周。我应该能够提供开始日期和结束日期。它可能只是一大早,但却想不到一种优雅的方式来完成这项任务。有什么指针吗?

谢谢! 乔治

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组中的哪一周。