2010-10-14 9 views
8

Suche nach einer SQL-Abfrage/Abfragen, die den Starttag (Montag) der aktuellen Woche bestimmen würden.Suche nach dem Starttag (Montag) der aktuellen Woche

Beispiel: Wenn heute ist -> dann der Anfang der Woche ist

Sat Oct 09, 2010 -> Start of the week is Monday Oct 04, 2010 
Sun Oct 10, 2010 -> Start of the week is Monday Oct 04, 2010 
Mon Oct 11, 2010 -> Start of the week is Monday Oct 11, 2010 
Tue Oct 12, 2010 -> Start of the week is Monday Oct 11, 2010 

Ich habe viele „Lösungen“ auf Google und Stackoverflow gesehen. Der Blick etwas wie:

SET @pInputDate = CONVERT(VARCHAR(10), @pInputDate, 111) 
SELECT DATEADD(DD, 1 - DATEPART(DW, @pInputDate), @pInputDate) 

Dies schlägt fehl, weil: Sun 10. Oktober 2010 -> Beginn der Woche Montag 11. Oktober 2010 (was falsch ist).

+0

Müssen Sie nur Montag oder der erste Arbeitstag der Woche finden? –

+0

Ich möchte den Start der Woche (Montag) unabhängig davon, ob es ein Arbeitstag oder ein Feiertag ist. –

Antwort

12

Versuchen Sie, DATEFIRST zu verwenden, um den Wochentag explizit als den "ersten" festzulegen.

set DATEFIRST 1 --Monday 
select DATEADD(DD, 1 - DATEPART(DW, @pInputDate), @pInputDate) 

Dies wird den Montag der Woche kehrt der Inputdate in fällt.

+0

Ich habe eine andere Lösung gefunden, aber diese ist viel einfacher und sauberer. Vielen Dank. –

+0

Wie können wir es schaffen, letzte bis letzte Woche Montag zu finden? Ich habe versucht, 2- statt 1 zu machen, aber kein Glück. Irgendwelche Vorschläge? –

Verwandte Themen