2

第一次在这个网站上发布海报,我需要一些建议:

是否可以基于 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
4

1 回答 1

0

这样做的一种方法是有一个列出周和相关期间的辅助表,然后在该表上加入包含要检查的日期的表。

前任:

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

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

于 2013-04-04T23:54:58.193 回答