1

SQL ステートメントを使用して週末を無視する方法に関するいくつかのトピックを見つけました。休日を無視する必要はありません。週末だけです。ただし、これらのどれも私にはうまくいかないようです。私はasp.net内でAccessデータベースを使用しており、この関数を使用してみました:

SELECT *
FROM your_table
WHERE ((DATEPART(dw, DateCalled) + @@DATEFIRST) % 7) NOT IN (0, 1)

しかし、AccessDataSource はその構文が気に入らないようです。私の実際のクエリでは、3 営業日経過したレコードを検索する必要があります。つまり、金曜日にレコードがある場合、そのレコードは次の水曜日まで表示されません。

4

2 に答える 2

3

日付/時刻パラメーターDATEFIRSTがあり、 DateCalledの値が DATEFIRST の 3営業日以内である行を選択するとします 。これらは、各パラメーター値に必要な最新の日付であることを意味すると解釈します...

DATEFIRST         3 workdays previous
---------------   -------------------
Mon, 01/28/2013   Wed, 01/23/2013
Tue, 01/29/2013   Thu, 01/24/2013
Wed, 01/30/2013   Fri, 01/25/2013
Thu, 01/31/2013   Mon, 01/28/2013
Fri, 02/01/2013   Tue, 01/29/2013
Sat, 02/02/2013   Tue, 01/29/2013
Sun, 02/03/2013   Tue, 01/29/2013

次のクエリを Access 2007 でテストしました。上記の DATEFIRST パターンに一致する結果が返されます。

PARAMETERS DATEFIRST DateTime;
SELECT *
FROM your_table AS y
WHERE y.DateCalled < DateAdd(
        'd',
        Switch(
            Weekday([DATEFIRST])=1,-4,
            Weekday([DATEFIRST])=2,-4,
            Weekday([DATEFIRST])=3,-4,
            Weekday([DATEFIRST])=4,-4,
            Weekday([DATEFIRST])=5,-2,
            Weekday([DATEFIRST])=6,-2,
            Weekday([DATEFIRST])=7,-3
            ),
        [DATEFIRST]
        );

あなたのコメントに基づいて、私はあなたの意図を誤解したと思います。パラメータクエリが必要ないようです。代わりにDateCalled、クエリが実行される日付の 3 日前にフィルタを適用する必要があります。もしそうなら、句を破棄し、 Access の関数を にPARAMETERS置き換えます。Date()[DATEFIRST]

SELECT *
FROM your_table AS y
WHERE y.DateCalled < DateAdd(
        'd',
        Switch(
            Weekday(Date())=1,-4,
            Weekday(Date())=2,-4,
            Weekday(Date())=3,-4,
            Weekday(Date())=4,-4,
            Weekday(Date())=5,-2,
            Weekday(Date())=6,-2,
            Weekday(Date())=7,-3
            ),
        Date()
        );
于 2013-02-05T20:34:39.807 に答える
3

使用できますweekday

SELECT *
FROM your_table
WHERE weekday(date) NOT IN (1, 7)
于 2013-02-05T17:31:42.217 に答える