2016-01-05 2 views
1

Код возвращает:Правильный номер недели от DATEPART

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

но

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

returns..53:/

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

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

+0

На самом деле, это не та самая неделя, когда большинство людей указали номер недели. Я бы ожидал, что Неделя 53 2016 года придет примерно через 360 дней –

ответ

5

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

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

LiveDemo

EDIT:

L ooks вроде iso_week поддерживается от SQL Server 2008+.

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

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

+0

Хм .. вот что я пробовал, но у меня есть сообщение: Msg 155, Level 15, State 1, Line 1 'iso_week' is не признанный вариант datepart ... любая идея почему? –

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