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

これを行う 1 つの方法は、週と関連する期間をリストする補助テーブルを用意し、そのテーブルを結合して、チェックする日付を含むテーブルを作成することです。

元:

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

は、週番号とその開始日と終了日の列、 を持つテーブルでperiods.week、日付に関連付けられた週を示します。データベースが数年にわたってレコードを保持する必要がある場合は、会計年度の補足 (インデックス付き) 列を追加し、クエリでこの列に制約を追加して、スキャンを 1 つの会計年度に減らすことができます。そのような 1 年は平均 52 行であり、20 年分の期間を保持したり、データベースを調整してテーブルをメモリに保持したりすることはそれほど問題ではありません。tbl.rdateperiodsweekstartdateenddate

于 2013-04-04T23:54:58.193 に答える