週番号を取得する必要があります。例えば、2016年1月のためにそれのようなものでなければなりません:SQLサーバー:ISOWKパラメータのDATEPARTを使用して、週の最初の曜日に変更してください。
[Week Number]
53 <--- for dates from Jan 1 to Jan 2
1 <--- for dates from Jan 3 to Jan 9
2 <--- for dates from Jan 10 to Jan 16
... <--- etc.
見ての通り、一週間は日曜日から開始する必要があります。週番号を取得するために
SET DATEFIRST 7
そして、このいずれかを:私は一日の始まりに設定するには、以下の機能を使用しました
DATEPART(ISOWK, SOME_DATE)
をしかし、私はISOWK
が使用されたときにDATEFIRST
が結果に影響しないことに気付きました - 週は常に月曜日から始まります。
だから、私は間違って何をやっていますか?ありがとうございました!
UPD:
私は機能を作ったが、それは良い作品と思われる:
CREATE FUNCTION [dbo].[GetWeekNumber]
(
@date as DATETIME,
@offset as INT
)
RETURNS NVARCHAR(100)
BEGIN
DECLARE @weekNumber as int
DECLARE @year as int
SET @date = DATEADD(MINUTE, @offset, @date)
SET @year = DATEPART(year, DATEADD(DAY, 1 - DATEPART(WEEKDAY, @date), CAST(@date AS DATE)))
IF @@DATEFIRST = 7
BEGIN
SET @date = DATEADD(day, 1, @date)
END
SET @weekNumber = DATEPART(ISO_WEEK, @date)
RETURN concat(@year, ', Week ', right('0' + convert(nvarchar, @weekNumber), 2))
END
あなたは(分単位)オフセット日付とタイムゾーンを渡す必要があります。この機能を実行する前に(0120-919-)(1 - 月曜日、7 - 日曜日)。例:
DECLARE @date as DATETIME
SET @date = '2016-01-03 12:00'
SET DATEFIRST 1
SELECT dbo.GetWeekNumber(@date, 0) -- 2015, Week 53
SET DATEFIRST 7
SELECT dbo.GetWeekNumber(@date, 0) -- 2016, Week 01
私はWEEKも試しました.DATEFIRSTで正しく動作しますが、必要ではありませんたとえば、「Jan 1」の週番号は「1」になりますが、上記のように番号付けが必要です:Jan 1,2 - > Week 53、Jan 3 ... 9 - > Week 1、Jan 10 ... 16 - > 2週 –
私の答えを更新します。 –
ありがとうございました!私は日に日を追加するだけでうまくいくことがわかりました。私の答えが更新されたので、関数と例を見ることができます。 –