2012-04-27 51 views
7

Quiero encontrar el registro para esta semana solo declare la fecha actual. Ejemplo:Encontrar el rango de fechas de la semana por fecha actual en sql?

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

así que ¿cómo puedo obtener el intervalo de fechas

 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 

entonces puedo consulta de selección por

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

Debe probar para qué día de la semana se encuentra y restar/agregar el número de días correspondiente a su fecha. – BugFinder

Respuesta

13

Éstos son algunos comandos útiles para aprovechar cada día de la semana

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 

usted entonces utilizar estos en su consulta para obtener el intervalo de fechas:

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

Así que quieres sólo los registros de esta semana?

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

Las consultas que otros han sugerido que puede funcionar, pero no ha definido qué es una "semana" para usted. Dependiendo del país/región y las razones comerciales, una semana podría ser de domingo a sábado, de lunes a domingo, de lunes a viernes, etc.

Por lo tanto, la mejor solución para encontrar el primer y último día de la semana es probablemente un calendar table donde rellena previamente el primer y el último día de la semana para cada fecha que necesite. A continuación, puede utilizar una consulta sencilla de obtener las fechas de inicio y finalización correctas para utilizar en su consulta:

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

Esta solución también tiene la ventaja de que se puede trabajar fácilmente con diferentes definiciones de una semana añadiendo nuevas columnas a tu tabla de calendario

Cuestiones relacionadas