在 Microsoft Access 中更改一年的起始周数

在 Microsoft Access 中更改一年的起始周数

我正在使用 Access 查询来捕获 Microsoft Access 中按周订购的特定商品数量。我的数据集从 2018 年 6 月 1 日到 2019 年 5 月 31 日。我添加了一列来从每个相应的订单日期中提取周数,只要我从日历年的第一周(一月的第一周)开始,在查询字段中使用以下表达式,它就可以正常工作:

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

我的问题是,我希望将 2018 年 6 月 1 日这一周显示为一年的第一周,并按时间顺序继续(第 53 周对应于 2019 年 5 月的最后一周)。2018 年 6 月 1 日属于日历年的第 22 周,因此我将表达式修改为:

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

但是,现在我在字段中的所有行中都收到“#func”错误。

有没有办法编辑这个表达式,以便我查看的“年份”遵循 6 月 1 日至 5 月 31 日的模式,并且周数可以反映这一点?

答案1

决赛firstweekofyear论点DatePart函数仅接受四个枚举中的一个:

  • vbUseSystem (0)使用 NLS API 设置。
  • vbFirstJan1 (1)从 1 月 1 日所在的周开始(默认)。
  • vbFirstFourDays (2)从新年至少有四天的第一周开始。
  • vbFirstFullWeek (3)从一年的第一个完整周开始。

因此,为该参数提供的值22将导致错误。


由于 2018 年 6 月 1 日至 2019 年 5 月 31 日的年份与日历年相差 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)))

相关内容