(私はイタリアにいます)すべての週がで始まり、Monday
で終わると仮定してくださいSunday
。
number of the week
を参照して決定するスカラー値関数を書きたいGETDATE()
何卒よろしくお願い申し上げます。
これに注意してください:SELECTはSETDATEFIRSTコマンドから独立している必要があります!!
(私はイタリアにいます)すべての週がで始まり、Monday
で終わると仮定してくださいSunday
。
number of the week
を参照して決定するスカラー値関数を書きたいGETDATE()
何卒よろしくお願い申し上げます。
これに注意してください:SELECTはSETDATEFIRSTコマンドから独立している必要があります!!
2つのライナーを使用できますか?
SET DATEFIRST 1;
SELECT DATEPART( WEEK , GETDATE())
今日のために
SELECT DATEPART( WEEK , GETDATE())
30を返しますが
SET DATEFIRST 1;
SELECT DATEPART( WEEK , GETDATE())
31を返します
テストされていないが、この質問に基づいて編集すると、次のselectステートメントでSQL Server 2008と同等のものを取得できますdatepart(iso_week, getdate())
(これはあなたが望むものだと私は信じています)
SELECT ISOWeek = (DATEPART(DY, Th) - 1) / 7 + 1
FROM (SELECT Th = DATEADD(D, 3 - (DATEPART(DW, getdate()) + @@DATEFIRST - 2) % 7, getdate())) s
これが、必要なことを実行するための小さなスニペットです。
DECLARE @firstOfYear DATETIME
SET @firstOfYear = STR(Year(GETDATE()), 4)+'-01-01 00:00:00'
SELECT DATEDIFF(ww, @firstOfYear - ((DATEPART(dw, @firstOfYear) + 5) % 7), GETDATE())
週の開始を別の日に設定する場合は、+5
をに基づいた値に変更するだけであることに注意して7 - dw
ください。これはMSSQL用です。
これは、年の最初の日を取得し、その日またはそれ以前の開始週の日を見つけることによって機能します。次に、渡された日付からその「最初の」週の開始までの週数を取得します。任意の日付の受け渡しを許可する場合は、すべてのGETDATE
呼び出しをパラメーターに置き換えるだけで、準備は完了です。単一のselectステートメントが必要な場合:
SELECT
DATEDIFF(ww, day1 - ((DATEPART(dw, day1) +5) % 7), GETDATE())
FROM
(SELECT CAST(STR(Year(GETDATE()), 4)+'-01-01 00:00:00' AS DATETIME) day1) d
select datepart(week,getdate())
詳細については、http://msdn.microsoft.com/en-us/library/aa258265(v = sql.80).aspxをご覧ください。
declare @oldDF int
set @oldDF = @@DATEFIRST
set DATEFIRST 1
select DATEPART(WEEK, GETDATE())
set DATEFIRST @oldDF