Estoy tratando de establecer la fecha de inicio para el viernes en una consulta SQL. Lo que he hecho como puedes ver a continuación. Lo que tengo que hacer ahora es mostrar todos los ID de juego entre el viernes y el sábado, y se actualiza cada semana (para que cada semana muestre otros juegos que se han jugado esa semana).

Soy un principiante completo en SQL, por lo que cualquier ayuda es muy apreciada.

He intentado la consulta sql a continuación.

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
)

¡Me encantaría cualquier ayuda que pueda obtener!

Salud

0
HJarry 21 mar. 2017 a las 01:38

2 respuestas

La mejor respuesta

Quizás esto funcione mejor:

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
Degan 21 mar. 2017 a las 17:21

Si solo necesita el fin de semana anterior, este código funcionará:

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

El código parece un poco loco, pero funciona. Si necesita consultar otros fines de semana específicos, esta puede ser una opción:

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

Dando un paso más allá, es posible que deba informar sobre cada uno de estos fines de semana. El siguiente código le brinda todos los viernes sábados de cada semana para 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
0
Chris Beardsley 21 mar. 2017 a las 04:21