本网站上的第一次海报,我需要一些建议:
是否可以在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
答案 0 :(得分:0)
执行此操作的一种方法是使用辅助表列出周和关联的句点,然后在该表上加入包含要检查日期的表。
例如:
SELECT
periods.week, tbl.rdate
FROM
tbl, periods
WHERE
tbl.rdate BETWEEN periods.startdate AND periods.enddate
会为您提供与periods.week
日期相关联的一周tbl.rdate
,其中periods
列包含week
,startdate
,enddate
列周数及其开始和结束日期。如果您的数据库必须保留多年的记录,则可以为财务年度添加补充(索引)列,并在查询中为此列添加约束以将扫描减少到单个财务年度。这样的一年平均为52行,保持20年的时间段不应该太成问题,甚至调整数据库以保持表内存。