2017-03-20 3 views
0

J'essaie de définir la date de début à vendredi sur une requête sql. Ce que j'ai fait comme vous pouvez le voir ci-dessous. Ce que je dois faire maintenant, c'est montrer tous les GameID entre vendredi et samedi, et ça rafraîchit chaque semaine (de sorte que chaque semaine il montre d'autres jeux qui ont été joués dans cette semaine). Je suis un débutant complet à SQL donc toute aide est grandement appréciée!Date de début de la configuration SQL à vendredi et lecture des données entre 2 dates

J'ai essayé la requête sql ci-dessous.

DECLARE @StartFriday datetime 
DECLARE @EndSaturday datetime 

SET DATEFIRST 6 -- Set the start of the week to Friday 

SELECT * 
FROM 
(

SELECT GameDate, 
     DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), -5)) AS 'StartFriday', 
     DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), 1)) AS 'EndSaturday' 

FROM VW_Resultaat_Score 

WHERE GameDate BETWEEN 'StartFriday' AND 'EndSaturday' --Show all GameDates between @StartFriday and @EndSaturday 
) 

J'aimerais toute aide que je peux obtenir!

Vive

+1

Tout d'abord, 'SET DATEFIRST 6' le configure pour démarrer samedi, pas vendredi. Vous voulez utiliser '5'. Deuxièmement, qu'obtenez-vous de cette requête? –

+0

Votre clause 'where' essaye de comparer une date à deux littéraux de chaîne, aucun ne contenant de date. En ce qui concerne les alias de colonne, puis-je vous proposer une lecture suggérée: [Est-ce une chaîne littérale ou un alias?] (Http://weblogs.sqlteam.com/jeffs/archive/2007/08/30/string-literal-alias -sql-server.aspx). – HABO

Répondre

0

Peut-être que cela fonctionnera mieux:

DECLARE @StartFriday datetime 
DECLARE @EndSaturday datetime 

SET DATEFIRST 6 
Set @StartFriday = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), -5)) 
Set @EndSaturday = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), 1)) 

SELECT * 
FROM 
(
SELECT GameDate 
FROM VW_Resultaat_Score 
WHERE GameDate BETWEEN @StartFriday AND @EndSaturday 
) 
+0

Cela fonctionne presque, Après la deuxième requête de sélection, vous avez ajouté un, après GameDate qui vous donnera une erreur. Et j'avais besoin d'ajouter un alias après la sous-sélection sinon cela vous donne une erreur. Mais cela a vraiment fonctionné! Merci! – HJarry

0

Si vous ne jamais besoin le week-end précédent, ce code fonctionnera:

SELECT * 
FROM VW_Resultaat_Score 
WHERE GameDate BETWEEN 
(SELECT DATEADD(d, 1 - datepart(weekday, dateadd(d, 2, getdate())), getdate())) 
AND 
(SELECT DATEADD(d, 1 - datepart(weekday, dateadd(d, 1, getdate())), getdate())) 
code

ressemble un peu fou, mais ça marche. Si vous avez besoin d'interroger d'autres week-ends spécifiques, cela peut être une option:

DECLARE @getdate date 
SET @getdate='2017-05-16' 
SELECT * 
FROM VW_Resultaat_Score 
WHERE GameDate BETWEEN 
    (SELECT DATEADD(d, 1 - datepart(weekday, dateadd(d, 2, @getdate)), @getdate)) 
    AND 
    (SELECT DATEADD(d, 1 - datepart(weekday, dateadd(d, 1, @getdate)), @getdate)) 

Prenant un peu plus loin, vous devrez peut-être un rapport sur chacun de ces week-ends. Le code suivant vous donne tous les vendredis samedis de chaque semaine pour 2017.

WITH Fri as 
(SELECT DATEPART(YEAR,DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), n.num)) yyyy, DATEPART(wk,DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), n.num)) weeknumber, Fridays = CAST(DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), n.num) as Date) 
FROM (SELECT TOP 366 num = ROW_NUMBER() OVER(ORDER BY a.NAME)-1 FROM dbo.syscolumns a, dbo.syscolumns b) n 
WHERE DATENAME(weekday, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), n.num)) = 'Friday') 
, 
Sat as 
(SELECT weeknumber=DATEPART(wk,DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), n.num)), Saturdays = CAST(DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), n.num) as Date) 
FROM (SELECT TOP 366 num = ROW_NUMBER() OVER(ORDER BY a.NAME)-1 FROM dbo.syscolumns a, dbo.syscolumns b) n 
WHERE DATENAME(weekday, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), n.num)) = 'Saturday') 
Select Fri.weeknumber, fri.yyyy, Fridays, Saturdays 
FROM Fri 
JOIN Sat on Fri.weeknumber=Sat.weeknumber