SQL 将开始日期设置为星期五,并读取 2 个日期之间的数据

SQL setting start date to Friday, and read Data between 2 dates

我正在尝试将 sql 查询的开始日期设置为星期五。正如您在下面看到的,我已经完成了。我现在需要做的是显示周五和周六之间的所有GameID,并且每周刷新一次(这样每周都会显示该周玩过的其他游戏)。

我是 SQL 的初学者,非常感谢任何帮助!

我已经尝试了下面的 sql 查询。

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
)

我很乐意得到任何帮助!

干杯

也许这样会更好:

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
)

如果您只需要前一个周末,此代码将有效:

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

代码看起来有点疯狂,但它确实有效。如果您可能需要查询其他特定的周末,这可能是一个选项:

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

更进一步,您可能需要在每个周末都进行报告。以下代码为您提供了 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