2017-03-23 7 views
-1

Je suis en train de régler le jour de départ au samediSQL - Obtenez toutes les dates entre le jour actuel et début et la fin de la semaine

SET DATEFIRST 6 -- Sets start day to Saturday 

Et puis obtenir toutes les GameDate entre le début de la semaine et la fin de la semaine. Mais il doit être fait avec le jour actuel. Par exemple: si le jour est en cours jeudi et la fin de la semaine est le vendredi, je ne veux pas faire:

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)) 

Parce que ce sera plus que les 5 prochains jours se montre. Et si CurrentDay est jeudi, je ne veux pas que les 5 prochains jours soient affichés. Juste les GameDates de chaque semaine.

C'est ce que je suis arrivé à ce jour:

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; 

Certains de la requête est probablement faux, en particulier la dernière partie.

J'espère que je me suis fait assez clair, s'il y a des questions s'il vous plaît ne pas hésiter à me demander!

Répondre

1

Jetez un oeil:

-- 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 

dbfiddle here