sql >> データベース >  >> RDS >> Sqlserver

SQLサーバーを使用して週末を除くDATEDIFFを取得します

    以下にクエリの例を示します。これは、私がどのように解決したかの詳細です。

    DATEDIFF(WK, ...) の使用 2 つの日付の間の週数が返されます。 SQL Server は、これを日数ではなく週数の差として評価します。これを使用して、日付間に渡された週末の数を判断できるため、これは完璧です。

    したがって、その値を 2 倍して、発生した週末の日数を取得し、それを DATEDIFF(dd, ...) から引くことができます。 平日の数を取得します。

    ただし、開始日または終了日が日曜日の場合、これは 100% 正しく動作しません。そのため、これらのインスタンスを処理するために、場合によっては計算の最後にロジックを追加しました。

    DATEDIFF 完全に包括的でなければなりません。例えば9/10 と 9/11 の違いは 1 日ですか、それとも 2 日ですか?後者の場合、最終製品に 1 を追加します。

    declare @d1 datetime, @d2 datetime
    select @d1 = '9/9/2011',  @d2 = '9/18/2011'
    
    select datediff(dd, @d1, @d2) - (datediff(wk, @d1, @d2) * 2) -
           case when datepart(dw, @d1) = 1 then 1 else 0 end +
          case when datepart(dw, @d2) = 1 then 1 else 0 end
    


    1. SQL ServerでOBJECTPROPERTY()を使用して、オブジェクトがストアドプロシージャであるかどうかを確認します

    2. バケット充填 SQL クエリ CTE

    3. 致命的なエラー:キャッチされない例外'mysqli_sql_exception'とメッセージ'クエリ/プリペアドステートメントでインデックスが使用されていません'

    4. Oracle SQL Developerでバッファサイズを増やしてすべてのレコードを表示するにはどうすればよいですか?