2016-10-03 32 views
1

TSQLを使用するISO Year Week番号を付与するために月にISO Week番号を取得する必要があります。TSQLのISO月間週番号(ISO Yearの場合)週番号

例:次のコードは、2002年12月31日の週#1を返します。これは正しいです。 ISO年週:それは私の質問はどのように私は...

(1)ISO週番号の例を取るんされ、2002年の最初の月曜日とISO 2002年の最初の日

select DATEPART(ISO_WEEK, '12-31-2001'); --Week 1 January 2002 

です番号:1416年4月4日、2016年(4月第1週)。

(2)ISO Year Week Number 14を取得し、上記の例ではApril Month Week Number = 1を返します。

ISO Year Week NumberからISO Month Week#を取得するためにSQL Serverに何もないようです。私は書いた機能を持っていますが、それを稼働させるためにいくつかのハックがありますが、100%ではありません。

+0

ISO_WEEK番号を指定すると、月の取得方法(1月1日、12月52日)を尋ねられますか? – Beth

+0

こんにちはベス、私は月に@をどのように求めています。 2016年のISO Week 14月= 2016年4月4日(April Week Number = 1)としましょう。私は上記の質問を更新しました。ありがとうございます –

答えて

0

私はこのようなものが欲しいと思いますが、なぜISO_WEEKが必要なのか分かりません。 getdate()をカラムに置き換えてください。

select datepart(wk, getdate()) - datepart(wk,dateadd(m, DATEDIFF(M, 0, getdate()), 0)) + 1 
+0

私はISOの年を使用しているので、私はISOの月の週が必要ですあなたの返信に感謝します..コードは月の週番号を返しますが、ISOの年は53週を持つことができるので、 2001年には12月の第6週が、ISOの場合は2002年に1月の第1週に選ばれます。datepart(wk、'12 -31-2001 ') - datepart(wk、dateadd(m、DATEDIFF(M、0、 12-31-2001 ')、0))+ 1このISOカレンダーを参照してください。 http://www.epochconverter.com/weeks/2002 –

+0

ああ、私は@RegencySoftwareを参照してください – scsimon

0

ISO月間週数を関数で取得する処理を試みた後、SQL SeverでISO_Calendarテーブルを作成する方が簡単な解決策と判断しました。

TSQLでは、ISO Year Week NumberとISO Year Numberの一部を取得できます。 ISO Month Week Numberは別の話です。

ISO月間以外のすべての列にデータを入力して、2000〜2040のデータを持つ表を作成します。次に、2回目のパスでテーブルをループし、月曜日の月の#に基づいてISO月を設定しました。

私は月曜日と日曜日の間に@Dateをチェックする日付のISO Month番号を取得したいと思います。私の場合は、株式分析サイトのため、月曜日から金曜日までの日付のみに関心があります。

select @ISOMonthWeekNo = c.ISOMonthWeekNo 
from ISO_Calendar c 
where @TransDate between c.Monday and c.Sunday; 

ISO_Calendar

利点は、テーブルが一度構築し、データの正確性を検証する方が簡単です。