Wie vergleiche ich die aktuelle Woche mit SQL server?

Wie kann ich eine SQL server Date Spalte mit der aktuellen Woche vergleichen?

Zum Beispiel:

WHERE [Order].SubmittedDate = *THIS WEEK* 

Sie können Ihr date in eine Wochennummer umwandeln und dies mit der Wochennummer aus dem aktuellen date vergleichen. Ebenso musst du das Jahr auch vergleichen, damit du die letzten Wochen nicht bekommst.

 WHERE DATEPART(wk, [Order].SubmittedDate) = DATEPART(wk, GETDATE()) AND DATEPART(yy, [Order].SubmittedDate) = DATEPART(yy, GETDATE()) 

Angenommen, Sie sind immer "diese Woche" und es gibt keine Aufzeichnungen mit übermittelten data in der Zukunft, die ich mir vorstellen könnte der Fall, den Sie tun können:

 WHERE [Order].SubmittedDate >= DATEADD(dd, -(DATEPART(dw, GETDATE()) -1), GETDATE()) 

Wenn data in die Zukunft gehen, ist die volle Einschränkung auf diese Woche:

 WHERE [Order].SubmittedDate >= DATEADD(dd, -(DATEPART(dw, GETDATE()) -1), GETDATE()) AND [Order].SubmittedDate < CAST(CONVERT(VARCHAR(10), DATEADD(dd, (8 - DATEPART(dw, GETDATE())), GETDATE()), 120) AS DATETIME) 

Ich würde dringend empfehlen, eine Klausel auf der Grundlage eines Anfangs- und Enddatums wie dieses zu verwenden, da es eine effiziente Indexnutzung ermöglicht, also sollte es besser sein.

Versuche dies:

 WHERE [Order].SubmittedDate BETWEEN DATEADD(d, - DATEPART(dw, GETDATE()) + 1, GETDATE()) AND DATEADD(d, 7 - DATEPART(dw, GETDATE()) , GETDATE()) 

Vielleicht läuft das schneller, da muss es nicht immer ausgewertet werden:

 DECLARE @StartDate DATETIME, @EndDate DATETIME SELECT @StartDate = DATEADD(d, - DATEPART(dw, GETDATE()) + 1, GETDATE()), @EndDate = DATEADD(d, 8 - DATEPART(dw, GETDATE()) , GETDATE()) -- // Strip time part, so week starts on Sunday 00:00 SELECT @StartDate = CAST(FLOOR(CAST(@StartDate AS FLOAT)) AS DATETIME), @EndDate = CAST(FLOOR(CAST(@EndDate AS FLOAT)) AS DATETIME) ... WHERE [Order].SubmittedDate >= @StartDate AND [Order].SubmittedDate < @EndDate