2011-02-07 16 views
6

月の週数を計算したいと思いますか?週数を計算するにはどうすればいいですか? ありがとうございます!TSQL月の週数を計算する

+2

リストいくつかのサンプルの日付と予想される出力 – RichardTheKiwi

答えて

6

これはあなたにその月以内に@dt日の週を与えます。過剰発現CASEステートメントを使用して第二列は「奇数」または「偶数」

declare @dt datetime 
set @dt = GETDATE() 

select 
    WhichWeekOfMonth = datepart(wk, @dt) 
        - datepart(wk,dateadd(m, DATEDIFF(M, 0, @dt), 0)) + 1, 
    case when (datepart(wk, @dt) 
      - datepart(wk,dateadd(m, DATEDIFF(M, 0, @dt), 0)) + 1) % 2 = 1 
     then 'Odd' else 'Even' end 
+0

それは素晴らしい1つのリチャードです。あなたはまた、私たちが逆を行う方法を手伝ってもらえますか? - 月と週の数字があれば、その週の最初と最後の日付を得ることができますか? – Jinith

0

はこれを試してみてください:

SELECT (DATEPART(d, '02/07/2011')/7)%2 AS WeekNo, --Replace your date column in place of '02/07/2011' 
     CASE (DATEPART(d, '02/07/2011')/7)%2 
       WHEN 1 THEN 'Odd' 
       ELSE 'Even' 
      END AS WeekType 
+0

私の定義で(間違った答えを与える - 私を参照してください答え) - それはそれが週1であると言う – RichardTheKiwi

+0

上記のクエリは、与えられた日付の週が月の偶数週か奇妙な週かどうかを示します。 – Chandu

4

のいずれかを表示するために、ありますこれは、毎月

declare @dates datetime 
select @dates='2011-03-22' 
SELECT datepart(dd,@dates), ceiling (cast(datepart(dd,@dates)as numeric(38,8))/7) 
3

どの程度のためにあなたに週番号を与えます簡単にカスタマイズ、および予測可能な、読める何か...

DECLARE @dayOfMonth AS INT; 
SET @dayOfMonth = DATEPART(DAY, '3/14/2013'); 
SELECT CASE 
    WHEN @dayOfMonth < 8 THEN 1 
    WHEN @dayOfMonth < 15 THEN 2 
    WHEN @dayOfMonth < 22 THEN 3 
    ELSE 4 
END AS weekOfMonth; 
0

私は、これはアプローチが非常に明白になり思う:

DECLARE @DayOne DATETIME 
DECLARE @ThisDay DATETIME 
SET @ThisDay = GETDATE() 
SET @DayOne = CAST(CAST(MONTH(@ThisDay) AS VARCHAR) + '/1/' + CAST(YEAR(@ThisDay) AS VARCHAR) AS DATETIME) 
SELECT (DATEPART(wk, @ThisDay) - DATEPART(wk, @DayOne) + 1) AS [Week Of Month] 

SQL Server 2012のは、より簡単にDayOne文字列を構築するために使用することができCONCAT機能を持っています

DECLARE @DayOne DATETIME 
DECLARE @ThisDay DATETIME 
SET @ThisDay = GETDATE() 
SET @DayOne = CAST(CONCAT(MONTH(@ThisDay), '/1/', YEAR(@ThisDay)) AS DATETIME) 
SELECT (DATEPART(wk, @ThisDay) - DATEPART(wk, @DayOne) + 1) AS [Week Of Month] 
関連する問題