2016-10-13 5 views
0

Как получить номер недели на основе текущей даты в SQL Server 2014?Как получить номер недели SQL Server 2014

Пожалуйста, обратите внимание, всегда год должен начинается с 1-го февраля и в конце года будет 31 января

неделя начинается с воскресенья по субботу.

+0

ли вы имеете в виду вы хотите неделю с 1 февраля, как 1-й недели? – jarlh

+0

@jarlh да пожалуйста – user2331670

+0

Я видел несколько разных определений для «недели», но это новый. Вы действительно имели в виду февраль, а не январь? Какой номер недели должен пройти недели в январе? Будет ли около 50? – hvd

ответ

3

Вы можете получить число недель, начиная с 1 февраля, а затем использовать его для расчета недели:

select (case when month(getdate()) < 2 
      then datediff(week, 
          datefromparts(year(getdate()) - 1, 2, 1), 
          getdate() 
         ) 
      else datediff(week, 
          datefromparts(year(getdate()), 2, 1), 
          getdate() 
         ) 
     end) 

Примечание: datefromparts() была введена в SQL Server 2012. Вы можете сделать то же самое со строками и преобразования в датах ,

+0

Когда я запускаю это, я получаю ниже ошибки: «Msg 155, « недели »не является признанным датичным вариантом». – user2331670

0
declare @DATE_INSERT date='02-01-2014' 
select DATEPART(WK,@DATE_INSERT) - DATEPART(WK,DATEADD(DAY,1,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@DATE_INSERT),0)))) + 1 
0

Зависит, как вы определяете номер недели, но вы можете попробовать это:

SELECT DATEPART(wk, DATEADD('mm',-1,getdate())) 
+0

Число недель с 1 января до дня предыдущего месяца может отличаться от количества недель с 1 февраля до дня следующего месяца. – Serg

1

Попробуйте

SELECT CASE WHEN MONTH(GETDATE()) < 2 THEN (DATEPART(DAYOFYEAR,DATEADD(M,11,GETDATE())))/7 
      ELSE ((DATEPART(DAYOFYEAR,GETDATE())-31)/7)+1 
     END 
+0

Это работает. Благодарю. Я запустил ваш SQL-запрос, он возвращает неделю 37. Какой будет код, если я хочу номер предыдущей недели (36), пожалуйста? – user2331670

+0

В остальной части есть +1, вы можете удалить его, но на 1-ю неделю он вернется 0 –

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