2012-04-27 23 views
7

Chcę znaleźć rekord do tego tygodnia po prostu zadeklaruj aktualną datę. Przykład:Znajdź zakres dat tygodnia według bieżącej daty w sql?

 select datename(dw,getdate()) -- Example today is Friday "27-04-2012" 

więc jak mogę dostać zakres dat

 start on monday "23-04-2012" or sunday "22-04-2012" As @dateStart to 

    end on sunday "29-04-2012" or saturday "28-04-2012" As @dateEnd 

wtedy mogę wybrać zapytanie przez

 select * from table where date>[email protected] AND date<[email protected] 
+0

Musisz sprawdzić, w którym dniu tygodnia jesteś i odjąć/dodać odpowiednią liczbę dni do swojej daty. – BugFinder

Odpowiedz

13

Oto kilka przydatnych poleceń, aby uzyskać każdy dzień

SELECT 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -2) SatOfPreviousWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1) SunOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0) MondayOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 1) TuesOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 2) WedOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 3) ThursOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 4) FriOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 5) SatOfCurrentWeek 

tygodnia byś następnie użyć ich w zapytaniu, aby uzyskać zakres dat:

SELECT * 
FROM yourTable 
WHERE yourDate >= DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1) -- Sunday 
AND yourDate <= DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 5) -- Saturday 
4

Więc chcesz tylko rekordy z tego tygodnia?

SELECT t.* 
FROM table t 
WHERE t.date >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) 
AND t.date <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 
1

zapytań, które inne zasugerowały, że mogą zadziałać, ale nie zdefiniowałeś "tygodnia" dla ciebie. Zależnie od kraju/regionu i przyczyn biznesowych tydzień może być dniem niedzielnym, pn-nd, pon-pt itp.

Dlatego najlepszym rozwiązaniem do znalezienia pierwszego i ostatniego dnia tygodnia jest prawdopodobnie calendar table gdzie wstępnie wypełniasz pierwsze i ostatnie dni tygodnia dla każdej daty, której będziesz potrzebować. Następnie można użyć prostego zapytania, aby uzyskać początkowe i końcowe odpowiednie daty, aby korzystać w zapytaniu:

select @StartDate = FirstDayOfWeek, @EndDate = LastDayOfWeek 
from dbo.Calendar 
where BaseDate = @SomeDate 

To rozwiązanie ma również tę zaletę, że można łatwo pracować z różnymi definicjami tydzień dodając nowe kolumny do Twój stół kalendarza.