Изменение начальной недели года в Microsoft Access

Изменение начальной недели года в Microsoft Access

Я использую запрос Access для сбора количества определенных товаров, заказанных по неделям в Microsoft Access. Мой набор данных охватывает период с 1 июня 2018 г. по 31 мая 2019 г. Я добавил столбец для извлечения номера недели из каждой соответствующей даты заказа, и он отлично работает, если начать с первой недели календарного года (первой недели января), используя следующее выражение в поле запроса:

Week No: DatePart("ww",[date],1,1)

Моя проблема в том, что я хочу, чтобы неделя 1 июня 2018 года отображалась как первая неделя года и продолжалась в хронологическом порядке (неделя 53 соответствует последней неделе мая 2019 года). 1 июня 2018 года попадает в 22-ю неделю календарного года, поэтому я изменил выражение следующим образом:

Week No: DatePart("ww",[date],1,22)

Однако теперь я получаю ошибку «#func» в поле для всех строк.

Есть ли способ отредактировать это выражение так, чтобы «год», который я рассматриваю, следовал шаблону 1 июня - 31 мая, и номера недель отражали это?

решение1

Финалfirstweekofyearаргумент в пользуDatePartФункция будет принимать только одно из четырех перечислений:

  • vbUseSystem (0) Используйте настройку API NLS.
  • vbFirstJan1 (1) Начать с недели, на которую приходится 1 января (по умолчанию).
  • vbFirstFourDays (2) Начните с первой недели нового года, которая содержит не менее четырех дней.
  • vbFirstFullWeek (3) Начните с первой полной недели года.

Таким образом, предоставление этому аргументу значения 22приведет к ошибке.


Поскольку год, определенный как период с 1 июня 2018 года по 31 мая 2019 года, смещен относительно календарного года на 151 день, вам необходимо сместить свои расчеты на эту сумму.

Таким образом, расчет становится следующим:

Week No: datepart("ww",datevalue([date])-151)

Например:

?datepart("ww",#2018-06-01#-151)
 1 
?datepart("ww",#2018-07-01#-151)
 5 
?datepart("ww",#2019-04-01#-151)
 44 
?datepart("ww",#2019-05-31#-151)
 53 

Чтобы выражение можно было использовать в будущих годах, вы также можете рассчитать смещение «на лету» (поскольку оно не всегда может быть равно 151, поскольку некоторые годы будут високосными).

Чтобы добиться этого, можно использовать следующее выражение:

Week No: datepart("ww",datevalue([date])-(dateserial(year(date())-iif(month(date())<6,1,0),6,1)-dateserial(year(date())-iif(month(date())<6,1,0),1,1)))

Связанный контент