2017-03-23 3 views
-1

私は土曜日SQL - 現在の日の間のすべての日付を取得し、起動して、週

SET DATEFIRST 6 -- Sets start day to Saturday 

を開始日を設定し、週の開始と終了の間のすべてのGameDateを取得しようとしていますの終わり1週間。しかし、それは今日の日に完了する必要があります。例えば:金曜日、現在の日が木曜日であり、週の終わりがある場合、私はこれを行うにはしたくない:これは、次の5日間が示されますことことを確認します

DECLARE @StartWeek datetime Set @StartWeek = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), -5)) 
DECLARE @EndWeek datetime Set @EndWeek = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), 1)) 

ので。 そしてCurrentDayが木曜日にある場合、私は次の5日間を表示したくありません。毎週のGameDatesだけです。

これは私がこれまでに得たものである:

DECLARE @DateTable Table (DateofWeek Date) -- Creates table 
DECLARE @DateToday Date SELECT DAY(GETDATE()) 'Current Day' -- Gets current date 

DECLARE @StartWeek datetime Set @StartWeek = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), -5)) --This is the part thats wrong 
DECLARE @EndWeek datetime Set @EndWeek = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), 1)) --This is the part thats wrong 

SET DATEFIRST 6 -- Sets start day to Saturday 


SELECT DATEDIFF (DAY, @DateToday, @EndWeek) AS Diffrence_End 
SELECT DATEDIFF (DAY, @DateToday, @StartWeek) AS Diffrence_Start 
    FROM @DateTable 

WHILE @DateToday >= @EndWeek AND @DateToday <= @StartWeek -- Shows all gameDates between StartWeek and Endweek 
BEGIN 
    SELECT DATEDIFF (DAY, @DateToday, @EndWeek) 
    Insert Into @DateTable 



SELECT * 
    FROM @DateTable 
END; 

クエリのいくつかは、おそらく間違っている、特に最後の部分。

質問がある場合は、私に尋ねることを躊躇しないでください!

答えて

1

は、見てください:here

dbfiddle

-- Sets start day to Saturday 
SET DATEFIRST 6 

-- Creates table 
DECLARE @DateTable Table ([DateofWeek] date); 

-- StartDate = DATEPART(DW, ...) = 1 
DECLARE @StartDate date; 
SET @StartDate = DATEADD(day, (DATEPART(dw, GETDATE()) - 1) * -1, GETDATE()); 

-- EndDate = StartDate + 6 days 
DECLARE @EndDate date; 
SET @EndDate = DATEADD(day, 6, @StartDate); 

-- Generates table values 
DECLARE @CurrentDate date; 
SET @CurrentDate = @StartDate; 

WHILE @CurrentDate <= @EndDate 
BEGIN 
    INSERT INTO @DateTable ([DateofWeek]) VALUES (@CurrentDate); 
    SET @CurrentDate = DATEADD(day, 1, @CurrentDate); 
END 

--Check it 
SELECT *, DATENAME(dw, DateOfWeek) as Name FROM @DateTable; 

GO

 
DateofWeek   | Name  
:------------------ | :-------- 
18/03/2017 00:00:00 | Saturday 
19/03/2017 00:00:00 | Sunday 
20/03/2017 00:00:00 | Monday 
21/03/2017 00:00:00 | Tuesday 
22/03/2017 00:00:00 | Wednesday 
23/03/2017 00:00:00 | Thursday 
24/03/2017 00:00:00 | Friday 

関連する問題