2017-03-20 11 views
0

SQLクエリで開始日をfridayに設定しようとしています。私はあなたが下で見ることができるようにしています。私が今必要とするのは、金曜日と土曜日の間のすべてのGameIDを表示し、毎週リフレッシュする(毎週その週にプレイされた他のゲームを表示するためです)。SQLの開始日時を金曜日に設定し、2つの日付間のデータを読み取る

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

私は何か助けてもらえますか?

乾杯

+1

まず、SET DATEFIRST 6は金曜日ではなく土曜日に開始するように設定しています。あなたは '5'を使いたいと思っています。第二に、あなたはこの質問から何を得るのですか? –

+0

'where'句は日付と2つの文字列リテラルを比較しようとしていますが、どちらも日付を含んでいません。列のエイリアスについては、[文字列リテラルかエイリアスですか?](http://weblogs.sqlteam.com/jeffs/archive/2007/08/30/string-literal-alias -sql-server.aspx)。 – HABO

答えて

0

おそらくこれは良い仕事します:

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

これはほとんど動作し、2番目の選択クエリの後に、GameDateの後にエラーが追加されます。副選択の後にエイリアスを追加する必要がありました。そうしないと、エラーが発生します。しかし、これは間違いなく動作しました!ありがとう! – HJarry

0

あなただけの今までの週末は、以前の必要がある場合、このコードは動作します:

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 
関連する問題