2010-12-05 3 views
2

Ich bin fest und ich habe nichts dergleichen zuvor getan. Durch die Bereitstellung von heutigen Datum zB 2010-12-04, sollte ich folgendes:In SQL mit Today Datum erhalten Sie die Woche Datum (Mo-Sonne)

startdate = 2010-11-29
enddate = 2010-12-05

Grundsätzlich muss ich meine Abfrage filtern, so dass es gibt mir Daten für diese "Woche"

irgendeine Idee, wie man das beginnt, wird großartig sein!

Danke,

Tarun

+0

Ich denke, es gibt eine Datumsfunktion in SQLServer, die Sie verwenden könnten, um "Samstag" vom heutigen Datum (2010-12-04) zu erhalten, und dann könnten Sie eine bestimmte Fallart der Sache tun. Verwenden Sie SQL Server? –

+0

Diese Frage ist wahrscheinlich ein Duplikat: vorschlagen Sie suchen SO ... –

Antwort

2

Aktualisiert: Diese Funktion ist auf Graham at SqlTeam zurückzuführen. Es gibt das Datum von Montag für ein bestimmtes Datum zurück; es sollte mit jeder DATEFIRST Einstellung bewältigen:

CREATE FUNCTION dbo.WeekCommenceMondayDate(@MidWeekDate DateTime) 
RETURNS DateTime AS 
BEGIN 
DECLARE @WeekCommence DateTime 
    SET @WeekCommence = DateAdd(d, -((@@DATEFIRST + DatePart(dw, @MidWeekDate) -2) % 7), @MidWeekDate) 
    RETURN @WeekCommence 
END 


declare @today datetime = '2010-12-04' 
declare @weekstartdate datetime 

set @weekstartdate = dbo.WeekCommenceMondayDate(@today) 
select @weekstartdate as weekstartdate 
select DATEADD(DD, 6, @weekstartdate) as weekenddate 

Für eine Vielzahl von Datumsfunktionen siehe here.

+0

... müssen Sie nur darauf achten, dass SQL Server mit dem richtigen Wert für DATEFIRST konfiguriert ist - sagt mir, eine String-basierte Lösung vorschlägt, die schrecklich stirbt auf einem fremden Server. :) –

+0

Ich denke, Sie finden es funktioniert unabhängig davon, was DATEFIRST auf –

+0

festgelegt ist Korrekt basierend auf Kriterien gegeben, aber die meisten Leute betrachten die Woche ab Sonntag, endet am Samstag. – shamazing

0

Die unten funktionieren sollte - natürlich abhängig davon, wann Sie Wochen beginnen soll - und Sprache, so dass Sie es zwicken müssen.

DELCARE @startdate DATETIME = @thedate 
WHILE DATENAME(WEEKDAY, @startdate) <> 'Monday' 
BEGIN 
    SET @startdate = DATEADD(DAY, -1, @startdate) 
END 

' @startdate should now be the closest Monday on or prior to @thedate. 

... @ enddate Berechnung bleibt als Übung für den Leser. :)

+0

@Mitch. Wenn Sie einen bestimmten Wert für DATEFIRST garantieren können, würde ich dem zustimmen - ich würde wahrscheinlich immer noch das oben genannte verwenden, aber DATEPART (WEEKDAY vs. den entsprechenden Wert. Ich würde es nicht schrecklich nennen - wenn es nicht sehr oft aufgerufen wird ... –

+0

Sie können einfach '@@ DATEFIRST' verwenden und dementsprechend anpassen –

Verwandte Themen