1

と同等の SQL Server UDF を探していますDATEPART(WEEK, @date)が、呼び出し元が週の最初の曜日を指定できるようにします。WEEKMySql の関数にいくらか似ています。例えば:

CREATE FUNCTION Week (@date date, @firstdayofweek int)
RETURNS int
BEGIN
  -- return result would be the same as:
  --   SET DATEFIRST @firstdayofweek
  --   DATEPART(WEEK, @date)
END

私のアプリケーションには を呼び出す機会がありませんSET DATEFIRST

例:

SELECT Week('2013-08-28', 2) -- returns 35
SELECT Week('2013-08-28', 3) -- returns 36

SQL Server の の値に関係なく、上記の結果は常に同じです@@DATEFIRST

4

3 に答える 3

0
/*
@@DATEFIRST がどのようなものであっても
結果を次のように返す
曜日名,曜日番号
モ1
火 2
Wn 3
第 4
金 5
土6
す7
*/

関数の作成 dbo.fnFixWeekday
(
    @currentDate 日付
)
INTを返します
なので
始める
    -- DATEFIRST 設定を取得します
    DECLARE @ds int = @@DATEFIRST
    -- 現在の DATEFIRST 設定で曜日番号を取得します
    DECLARE @dow int = DATEPART(dw,@currentDate)

    RETURN 1+(((@dow+@ds) % 7)+5) % 7

終わり
于 2013-12-03T12:48:30.933 に答える
0

次のようなものを使用できます。

DATEPART(WEEK, DATEADD(DAY, 8 - @firstdayofweek, @date))

週の最初の曜日を移動する代わりに、実際の日付を移動しています。この式を使用すると、MS SQL Server が使用する日数と同じ数値を使用して、週の最初の曜日が設定されます。(日曜日 = 1、土曜日 = 7)

于 2013-08-28T20:32:43.943 に答える