0

直近の土曜日の日付を返すSSRS式を見つけようとしています。式が土曜日に実行される場合、前の週の土曜日を表示するようにします。

オンラインで見つけた例をいじって、必要な価値を生み出すためにそれを手に入れました。以下通り:

=IIf(Parameters!O_endDate.Value = nothing, DateAdd("d", -7-(WeekDay(Today(),7))+8, Today()), Parameters!O_endDate.Value)

愚かな投稿をお詫びします。上記の式がなぜ必要な値を生成しているのか理解できません。将来、他の曜日に実行したときに、希望どおりに機能し続けるかどうかを知りたいです。注:このコードは日曜日に実行しました。

4

3 に答える 3

2

あなたの目的のために、IIFステートメントは必要ないと思います-これは、パラメーターが何もない場合、パラメーターの値を返すだけです。

これにより、キー操作は のままになりますDateAdd("d", -7-(WeekDay(Today(),7))+8, Today())

これが何をするかというと、今日に日を追加するということです - これは-7+8=1 から-7-(WeekDay(Today(),7))+8単純化できます。1-(WeekDay(Today(),7))

ドキュメントhereを見ると、関数は 1、2、3 の値に対してのみ定義されているため、return_type は無効に見えます。現在機能している場合は、引き続き機能しない可能性があります。

これはDateAdd("d", 1 - WeekDay(Today(), 1), Today())、今日が日曜日のときに最新の日曜日を今日にしたい場合、または今日が日曜日のDateAdd("d", WeekDay(Today(), 2)), Today())ときに最新の日曜日が先週の場合に使用する場合に常に機能します。

どちらの場合も、Today() への 2 つの呼び出しが数ミリ秒離れているため、真夜中頃に間違った応答が生成される可能性があることに注意してください。絶対に正しいためには、次のようにする必要があります。

Declare @DateToCheck datetime=Today()
Select DateAdd('d', 1 - WeekDay(@DateToCheck, 1), @DateToCheck) 
于 2013-01-07T04:00:52.203 に答える
1

これは、ANSI SQL に近い、より一般化されたアプローチです。

SQL Server 2008のSQL Fiddleを参照してください。

DATEPART の戻り値はグローバル データベース設定に依存するため、戻り値は既知の土曜日に合わせて調整されます。これを別の曜日に変更すると、その日が最後になります。

于 2013-01-09T03:12:17.517 に答える