2016-08-20 10 views
0

入力としてGETDATE()が指定されている月の最初の週の日付を取得することは可能ですか?SQL Server:月の第1週と第2週の日付範囲を取得する

私は以下のコードによって、現在の週の日付を取得することができます: -

select 
    convert(varchar(50), dateadd(dd, - datepart(dw, GETDATE()) + 1, GETDATE()), 101), 
    convert(varchar(50), dateadd(dd, - datepart(dw, GETDATE()) + 7, GETDATE()), 101) 

がどのように私は、入力としてGETDATE()に基づいて月の第一、第二週の日付を得ることができますか?例えば

:7月の

  • 1週間の作業日数、2016 - 2016年1月7日 - 2/7/16
  • 2週間の作業日数: - 2016年4月7日 - 9/2016分の7

おかげ

EDIT: - 私は与えられた月の各週の開始日と終了を取得するクエリの下に使用しています: -

DECLARE @date date = '2016-07-08'--sample date 
DECLARE @firstDay date = DATEADD(M, DATEDIFF(M, 0, @date), 0) 
DECLARE @firstWeekLastDay date = DATEADD(D, 7-DATEPART(DW, @firstDay), @firstDay) 
DECLARE @secondWeekFirstDay date = DATEADD(D, 2, @firstWeekLastDay) 
DECLARE @secondWeekLastDay date = DATEADD(D, 5, @secondWeekFirstDay) 
DECLARE @thirdWeekfirstDay date = DATEADD(D, 2, @secondWeekLastDay) 
DECLARE @thirdWeekLastDay date = DATEADD(D, 5, @thirdWeekfirstDay) 
DECLARE @fourthWeekFirstDay date = DATEADD(D, 2, @thirdWeekLastDay) 
DECLARE @fourthWeekLastDay date = DATEADD(D, 5, @fourthWeekFirstDay) 
DECLARE @fifthWeekFirstDay date = DATEADD(D, 2, @fourthWeekLastDay) 
DECLARE @fifthWeekLastDay date = DATEADD(D, 5, @fifthWeekFirstDay) 

SELECT @firstDay, @firstWeekLastDay, @secondWeekFirstDay, @secondWeekLastDay, @thirdWeekfirstDay, @thirdWeekLastDay, @fourthWeekFirstDay, @fourthWeekLastDay 
+0

だから、その週は日曜日に始まり、その場合は土曜日に終わるでしょうか? – Whencesoever

+0

の例でも2週間しかないのですか? – Whencesoever

+0

そう、基本的に、特定の月の最初の週にあるすべての日付を取得します。 – Villie

答えて

1

あなたは、次のクエリを使用して範囲を得ることができます:

DECLARE @date date = '2016-07-08'--sample date 
DECLARE @firstDay date = DATEADD(M, DATEDIFF(M, 0, @date), 0) 

SELECT CASE DATEPART(DW, @firstDay) 
     WHEN 1 THEN DATEADD(D, 1, @firstDay) 
     ELSE @firstDay END D1, 
     DATEADD(D, 7-DATEPART(DW, @firstDay), @firstDay) D2 

ます。また、月の最初の日曜日を計算することができます。

DECLARE @date date = '2016-08-01' 
DECLARE @firstDayOfMonth date = DATEADD(M, DATEDIFF(M, 0, @date), 0) 
DECLARE @firstSundayOfMonth date = DATEADD(D, (DATEDIFF(D, '2016-08-07', @firstDayOfMonth))/7*7, '2016-08-07') 

最初の週は、第二、1からsunday-1になります - sunday+1からにsunday+6

+0

ありがとう!特定の月の開始日と終了日をそれぞれ取得するために、クエリの変更(Check Editセクション)を変更しました。 – Villie

0

これは、GETDATE()に基づく日曜日を除く、月の第1週と第2週のすべての日付を提供します。特定の日付をテストする場合は、@date変数の値を変更します。

DECLARE @dt1 Datetime, @dt2 Datetime 
DECLARE @date Datetime = GETDATE() 

SELECT @dt1 = DATEADD(MM, DATEDIFF(MM, 0, @date), 0) 
SELECT @dt2 = DATEADD(DD,14 , @dt1) 

;WITH daterange 
AS 
(
    SELECT [dates][email protected] , 
      DATEPART(WEEKDAY, @dt1) WD, --Weekday 
      DATEPART(DD,@dt1) [DAY], -- Day 
      1 WN -- Week no. 
    UNION ALL 
    SELECT [dates] + 1 , 
     DATEPART(WEEKDAY, [dates] + 1) WD, --Weekday 
     DATEPART(DD,[dates] + 1) [DAY], --Day 
     CASE WHEN DATEPART(WEEKDAY, [dates] + 1) = 1 AND [DAY]<>1 THEN WN + 1 ELSE WN END WN --Week no. 
    FROM daterange 
    WHERE [dates] + 1<= @dt2 
) 
SELECT [dates] 
FROM daterange C 
WHERE WN <= 2 AND WD <> 1 
関連する問題