Правильный номер недели из datepart

Код возвращает:

set datefirst 1
select datepart(wk,'2016-01-01')  - 1

но

set datefirst 1
select datepart(wk,'2015-12-31')

возвращает..53 :/

А по факту - это та же неделя. На этой неделе больше дней, относящихся к 2015 году, поэтому для любых дат на этой неделе должно быть «53» или «1» (одинаковое значение). Возможно ли избежать этого без создания специальной процедуры для анализа даты и корректировки возвращаемого значения?

Я использую SQL Server 2005


person Rafal_PL    schedule 05.01.2016    source источник
comment
На самом деле, это не та же неделя, как большинство людей определяет номер недели. Я ожидаю, что 53-я неделя 2016 года наступит примерно через 360 дней.   -  person Panagiotis Kanavos    schedule 05.01.2016


Ответы (1)


Вероятно, вы хотите iso_week:

set datefirst 1
select datepart(iso_week,'2015-12-31')    --53
select datepart(iso_week,'2016-01-01')    --53

LiveDemo

ИЗМЕНИТЬ:

Похоже, что iso_week поддерживается из SQL Server 2008+.

Возможно ли избежать этого без создания специальной процедуры для анализа даты и корректировки возвращаемого значения?

Вероятно, вам нужно написать собственный код для его расчета.

person Lukasz Szozda    schedule 05.01.2016
comment
хм .. это то, что я пробовал, но у меня есть сообщение: Msg 155, уровень 15, состояние 1, строка 1 'iso_week' не является распознанным вариантом datepart ... есть идеи, почему? - person Rafal_PL; 05.01.2016