Получите недели в SQL

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

У меня есть datetable, уже существующее, если это помогает. Это заполняется с ценностью этих прошлых лет дат и обновляется ночью через сохраненный proc, который выполняется заданием на сервере.

То, что я должен сделать, вытянуть в понедельник-воскресенье недели, таким образом, я могу правильно соединить их с таблицей отслеживания для подъема еженедельного графика хита. Я не хочу выписывать 52 постепенно больших избранных оператора и объединение их по очевидным причинам, и мне не нравится идея курсоров.

Я уже сделал это с месяцами и днями, но природа недель смущает меня по некоторым причинам, или это по сути отличается.

Какие-либо мысли о том, как автоматизировать процесс без курсоров или огромного выбора/объединения? Я пойду для курсора и выведу его в таблицу ночью если абсолютно необходимый, но Надеюсь, что нет.

К вашему сведению мой нужный формат в конце его был бы:

[Week number] | [StartDate] | [EndDate]

В течение каждой недели

6
задан Joe Doyle 30 April 2012 в 23:47
поделиться

3 ответа

Я могу отклониться от курса в том, что вы хотите, но похоже, что вам нужны такие вещи:

- например, количество записей, сгруппированных по неделям, за 2009 год

SELECT DATEPART(wk, DateField) AS WeekNumber, COUNT(*) AS HitsForWeek
FROM SomeTable
WHERE DateField >= '20090101' AND DateField < '20100101'
GROUP BY DATEPART(wk, DateField)
8
ответ дан 9 December 2019 в 20:43
поделиться

Вы можете предпочесть использовать datediff(day, '19800107', yourDate) / 7 (где 7-Jan-1980 - известный понедельник), чтобы не беспокоиться о том, когда система считает, что началась неделя. Кроме того, этот механизм очень легко адаптировать к различным неделям без необходимости учитывать значение @@DATEFIRST, просто выберите известное воскресенье, или известный четверг, или что угодно.

0
ответ дан 9 December 2019 в 20:43
поделиться

Еще кое-что добавлено - ответ AdaTheDev правильный, но по умолчанию он дает вам недели с воскресенья по субботу. Если вы хотите, чтобы недели были с понедельника по воскресенье, вы должны выполнить

SET DATEFIRST 1

, чтобы установить первый день недели на понедельник (1). Вы можете запросить @@ DateFirst, чтобы узнать, какой у вас параметр - по умолчанию это 7 (воскресенье) в конфигурации для английского языка (США).

3
ответ дан 9 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: