Как вернуть недели данных (от Солнца до Солнца) - PullRequest
0 голосов
/ 20 июля 2011

Я пытаюсь вернуть некоторые данные, основанные на серии недель. Это будет для отчета SSRS.

Например, мне нужно вернуть все строки, которые датированы с 3 июля по 9 июля включительно (вс-сб), назовите это неделей 1 месяца. Затем с 10 июля по 16 июля, то есть на 2 неделе, и так далее. Самое сложное - это продолжать его между месяцами. Например, с 26 июня по 2 июля.

Я уверен, что могу использовать DATEPART как-нибудь, но на самом деле понятия не имею, как. Может ли кто-нибудь предложить помощь?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 20 июля 2011

DATEPART(week, DateField) даст вам неделю года, которая будет соответствовать вашим критериям. Неделя месяца не является хорошим критерием для использования, поскольку она очень аморфна.

Вы можете получить неделю года для первого числа месяца, вернув DATEPART(week, '7/1/2011') или что-то еще, что даст вам отправную точку.

EDIT:

Для ваших дополнительных критериев из комментариев:

SELECT <fields>
FROM MyTable
WHERE YEAR(DateField) = 2011
AND DATEPART(week, Datefield) BETWEEN 
    DATEPART(week, '6/1/2011') AND DATEPART(week, (DATEADD(DAY, -1, (DATEADD(Month, 1,     '6/1/2011')))))

Возможно, вы захотите проверить количество закрывающих скобок, но в основном это говорит:

  • Год 2011
  • Неделя с 6 июня 2011 года по неделю от 30 июня 2011 года

Дополнительные расчеты даты должны быть получены до 01.07.2011 (месяц +1), а затем - до 30.06.2011. Альтернативой является жесткое кодирование разрывов дат для каждого месяца. Таким образом, вы также можете параметризировать даты и объединять как

CAST(@Month + '/1/' + @Year as smalldatetime)

0 голосов
/ 20 июля 2011

Я предлагаю использовать нечто похожее на измерение даты.Есть множество примеров того, как вы это делаете.Вот один из них: http://prologika.com/CS/forums/p/517/2094.aspx

Хорошо, я дам более точный ответ, потому что никто еще ничего не оставил

Declare @myDate datetime = getdate()

select DATEPART(week, @myDate) - DATEPART(week,CONVERT(DATETIME, DATENAME(mm, @myDate)+"/01/"+ DATENAME(yyyy, @myDate) ))-1

Это должно дать вам хорошее приближение, вы можете проверить моикруглые скобки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...