前営業日に発生したイベントに基づいて、Access 2007 で多数のレポートを自動化しています。火曜日から土曜日は前営業日が前日となります。月曜日は前営業日が2日前となります。レポートの 1 つは、タイムスタンプ付きの小口現金の支払いに関するものです。Date() 関数と Between ステートメントを使用して、前の就業日のレコードを取得するのは簡単です。
WHERE Paid_Out_Datetime Between Date()-1 AND Date()
これは、前日から現在 (当日の午前 4 時頃) までの支払いのリストを返します。しかし、次のように iif 関数に入れると:
WHERE Paid_Out_Datetime = iif(Weekday(Date())=2,Paid_Out_Datetime Between Date()-2 AND Date(), Paid_Out_Datetime Between Date()-1 AND Date())
...レコードは返されません。ただ利用しただけPaid_Out_Datetime = Date()-1
では、たまたま前日のまったく同じ時間に支払いが行われていない限り、記録はありません。Between 基準を iif 関数内に配置すると、単一の基準としての動作とは異なる動作をするようです。私の where 句はかなり単純に思えます。なぜそれがうまくいかないのですか?