5

レポートを月曜日に実行する場合、デフォルトの日付を金曜日に設定する必要がありますか? また、要件を見て、他の 4 つの条件。SQLステートメントでこれを行う方法が問題です。

したがって、擬似コードでは、

今日の日付が月曜日の場合、デフォルトの日付を完全な日付形式で金曜日に設定します。

今日の日付が土曜日の場合、完全な日付形式でデフォルトの日付を金曜日に設定します。

今日の日付が日曜日の場合、デフォルトの日付を完全な日付形式で金曜日に設定します。

それ以外の場合は、デフォルトの日付を前の営業日に設定します。

そのため、おそらく case ステートメントを含む 1 つの SQL ステートメントが必要です。

今、曜日を与えるこれらのステートメントを見つけたので、次の部分を実行する必要があります。これは、ケースステートメントまたは関数である可能性がありますか? これは私が助けを必要としている部分です。

select datename(dw,getdate()) --Monday
select datepart(dw,getdate()) -- 1
4

2 に答える 2

7
SET DATEFIRST 1;

DECLARE @day DATE = SYSDATETIME();

SELECT @day = DATEADD
(
  DAY, 
  CASE 
    WHEN DATEPART(WEEKDAY, @day) IN (1,2) 
      THEN  -(DATEPART(WEEKDAY, @day)+1) 
    ELSE -1 
  END, 
  @day);

SELECT @day;
于 2013-02-13T22:38:18.377 に答える
1

したがって、WEEKDAY (または dw) の値が 3 ~ 6 (火曜日から土曜日) の場合は、1 日を減算します。それ以外の場合は、日曜日の場合は 1 日、月曜日の場合は 2 日追加します。

幸い、日曜日の値は 1 で、月曜日の値は 2 であるため、それらの日の値を差し引くことができます。

DECLARE @DefaultDate datetime
SET @DefaultDate = 
    CASE 
        WHEN DATEPART(WEEKDAY, GETDATE()) IN (1,2) -- OR (1,7) outside the U.S.
            THEN DATEADD(DAY, (-1 - DATEPART(WEEKDAY, GETDATE())), GETDATE())                       
        ELSE
            DATEADD(DAY, -1, GETDATE())
    END
于 2013-02-13T23:02:37.603 に答える