从while循环值SQL创建变量名

时间:2013-04-04 23:13:10

标签: sql-server

本网站上的第一次海报,我需要一些建议:

是否可以在while循环中声明/创建一个新的变量?

上下文

该公司的财务日历为财务年度中的每个日期指定一个期间(月)和一个周数。这些可能会每年更改,具体取决于新财政年度的日期。

我想创建一个运行while循环的函数来获取指定日期的周数和周期数。

我希望能够说出

的内容
while i > @EndDate
    if date is between such and such then week = @W(i)
end

我不确定如何解释它。

我目前的功能列出了所有周和周期数字,但它看起来很乱,可能效率不高。

有人可以提供建议吗?

谢谢

编辑:

道歉

我的代码在SQL Server中。

到目前为止我所拥有的是凌乱和完整的草稿,但我现在暂时将它放在这里。

declare @StartDate datetime
,   @EndDate datetime
,   @ThisDate datetime
,   @P1 datetime
,   @P2 datetime
,   @P3 datetime
,   @P4 datetime
--and so forth until P12
, @W1   datetime
, @W2   datetime
, @W3   datetime
, @W4   datetime
, @W5   datetime
--and so forth until W52

set @StartDate = '2012-12-30'

set @P1 = @StartDate + 35
set @P2 = @P1 + 28
set @P3 = @P2 + 28
set @P4 = @P3 + 35
set @P5 = @P4 + 28
set @P6 = @P5 + 28
set @P7 = @P6 + 35
set @P8 = @P7 + 28
set @P9 = @P8 + 28
set @P10 = @P9 + 35
set @P11 = @P10 + 28
set @P12 = @P11 + 28

set @W1 = @StartDate
set @W2 = @W1 + 7
set @W3 = @W2 + 7
set @W4 = @W3 + 7
set @W5 = @W4 + 7
set @W6 = @W5 + 7

--while @ThisDate > @EndDate

set i = 1

--BEGIN

    if @ThisDate between @StartDate and (@W2 - 1) 
    then @ThisWeek = W1, @ThisPeriod = P1

--END

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是使用辅助表列出周和关联的句点,然后在该表上加入包含要检查日期的表。

例如:

SELECT 
    periods.week, tbl.rdate
FROM
    tbl, periods
WHERE 
    tbl.rdate BETWEEN periods.startdate AND periods.enddate

会为您提供与periods.week日期相关联的一周tbl.rdate,其中periods列包含weekstartdateenddate列周数及其开始和结束日期。如果您的数据库必须保留多年的记录,则可以为财务年度添加补充(索引)列,并在查询中为此列添加约束以将扫描减少到单个财务年度。这样的一年平均为52行,保持20年的时间段不应该太成问题,甚至调整数据库以保持表内存。