0

四半期と年を表すテキスト パラメータを含むレポートがあります。たとえば、'1Q11' は 2011 年の第 1 四半期を表し、'2Q13' は 2013 年の第 2 四半期を表します。このフォーマット「QuarterYear」を使用するフィールドを持つレコードもあります。

問題は、四半期と年がパラメーターで指定されたものの間にある場合にのみデータを表示するために、これをレポートに組み込む必要があることです。たとえば、ユーザーが「1Q12」と「4Q12」を選択した場合、レポートには、QuarterYear 値が「1Q12」、「2Q12」、「3Q12」、および「4Q12」のすべてのレコードが表示されます。ユーザーが「1Q12」および「2Q13」を選択した場合、レポートには、QuarterYear 値が「1Q12」、「2Q12」、「3Q12」、「4Q12」、「1Q13」、および「2Q13」のレコードが表示されます。

これらは日付値ではないため、単純な BETWEEN を使用できなかったため、私にとっては困難です。助言がありますか?

4

3 に答える 3

1

文字列データのフォーマット方法を制御できる場合は、3Q12 ではなく 12Q3 のようなフォーマットに変換することを検討してください。これにより、簡単BETWEENに作業できます。その特定のフィールドの形式を制御できない場合は、別のオプションとして、元のフィールドに基づいて、この形式でテーブルに計算フィールドを追加することができます。=right(QuarterYear,2)+'Q'+left(QuarterYear,1)

どちらの場合も、フィールドにインデックスを付けて を最適化できますBETWEEN。これらのどちらも使用できない場合は、Mark Ba​​nnister のソリューションがおそらく最適です。

于 2012-11-13T18:21:05.197 に答える
1

1Q12 を日付に解析しようとしましたか? この場合、2012 年 1 月 1 日、終了日は 2012 年 3 月 31 日になりますか?

1Q12 から 3Q12 のような範囲を選択する場合は、2012 年 1 月 1 日から 2012 年 9 月 30 日までのレポートを選択します。

それ以外の場合 (推奨される解決策ではありません)、ループで実行できる単純な関数を記述して、指定された範囲内のすべての四半期を見つけることができます。そして、月をインクリメントするようなことを行い(月ごとにインクリメントし、月を1にリセットします)、範囲の終わりに達するまで続けます。

于 2012-11-13T16:02:42.540 に答える
1

比較的小さなテーブルの場合、これを行う最も簡単な方法は、文字列スライスを使用することです。そのため、条件は次のようになります。

where ...
right(table_quarter,2)+left(table_quarter,1) >= right(@start,2) + left(@start,1) and
right(table_quarter,2)+left(table_quarter,1) <= right(@end,2) + left(@end,1) 
...

この条件は sargable ではないことに注意してください。テーブルの四半期の列にインデックスを使用することはできません。

于 2012-11-13T16:10:48.337 に答える