2013-08-27 2 views
1

Как я могу получить записи в SQL Server 2005. Ввод будет днем ​​недели. Результатом должны быть все записи за эту неделю до этой даты. Например, если я даю среду, я должен получить все записи с понедельника до среды той недели.Получить записи за неделю до указанной даты

Я пробовал это, чтобы получить все записи за определенную неделю, когда в качестве входного дня указан день недели. Но я хочу записи до данного дня с понедельника.

where RD.Date > DATEADD(dd, -(DATEPART(dw, @Date)-1), @Date) and RD.Date < DATEADD(dd, 7-(DATEPART(dw, @Date)), @Date) 

Благодарим за помощь заранее!

ответ

3

Как насчет этого?

WHERE RD.Date BETWEEN DATEADD(wk, DATEDIFF(wk,0,@Date), 0) AND @Date 

Я знаю, что в SQL Server, между силами всеохватывающего поиска, так что вы можете сделать> и < против RD.DATE

2

Это должно работать:

SET DATEFIRST 1 
... 
WHERE RD.Date >= DATEADD(dd, (-1) * (DATEPART(dw, @Date) - 1), @Date) 
AND RD.Date < DATEADD(dd, 1, @Date) -- inclusive 

DATEPART(dw, @Date) возвращает день номер в неделю, так что в среду он возвращается 3. Но так как вы хотите включить в понедельник мне нужно вычесть 1.

MSDN в соответствии с комментарием Lamak:

Когда DatePart в неделю (неделя, WW) или день недели (с.в.), возвращаемое значение зависит от значения, которое s et, используя SET DATEFIRST.

+2

Он возвращает 3 в зависимости от настройки 'DATEFIRST', не абсолютное значение – Lamak

+0

@Lamak: Спасибо. Соответственно отредактировал мой ответ. –

Смежные вопросы