#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