MSSql получает неделю даты

#sql-server

#sql-сервер

Вопрос:

Я использую старую версию mssql express, и мои отчеты, которые включают в себя бананы.

 SELECT 
   DATEPART(wk, '2021-01-01'),
   DATEPART(wk, '2021-01-02'),
   DATEPART(wk, '2021-01-03'),
   DATEPART(wk, '2021-01-04'),
   DATEPART(wk, '2021-01-05'), 
   DATEPART(wk, '2021-01-06'), 
   DATEPART(wk, '2021-01-07')
 

Возврат

 1,1,1,1,2,2,2
 

В итоге я сделал:

 select DATEPART(y,[date])/7 (DATEPART(y,[date])%7)/4
 

И это сделало трюк на данный момент, но имеет недостатки.
Но есть ли какой-нибудь разумный способ в mssql определить, какой тип недели вы хотите, используя только запрос? (не удается запустить набор раньше).
Я хочу, чтобы недели начинались по понедельникам, первая неделя имеет номер 1, а первая неделя года — это когда на этой неделе больше 3 дней.
В mysql это было бы:

 select week([date],3)
 

Комментарии:

1. В этом нет ничего плохого DATEPART(wk, . Результаты ожидаемы. Что это went bananas. значит? Чего вы ожидали?

2. @PanagiotisKanavos Ну, технически они не сошли с ума, я уверен, что неделя, которую он дает, верна где-то в мире. Но там, где я живу, и люди, получающие отчет, живут с 2020-12-28 по 2021-01-03, была неделя 53, с 2021-01-04 по 2020-01-10 была неделя 1. Итак, для пользователей это бананы, поскольку отчеты из всех других систем говорят, что на прошлой неделе была неделя 1, за исключением этого отчета, в котором говорится, что это была неделя 2.

3. Возможно, вы перепутали годы и использовали 2020 вместо 2021 ? Все эти цифры верны для недель, которые начинаются в воскресенье.

4. Даты одинаковы во всем мире. Номера недель, однако, имеют два разных определения (календарь и номер недели ISO), потому что годы не начинаются в воскресенье или понедельник. Существуют разные правила, которые определяют, какое число используется для последней недели в году. С другой стороны, начало недели отличается для каждой компании или даже отдела в одной и той же компании. Итак, чего вы на самом деле ожидали?

5. Посмотрите, каковы ваши ожидаемые значения. 2021-01-03 должна быть неделя 53? Первые три дня 2021 года — 53-я неделя? Это не то, чего можно было бы ожидать, независимо от того, где они живут, если только они не бухгалтеры . И даже тогда они не назвали бы это 53-й неделей за пределами своего офиса. То, что вы просили, — это номер недели ISO