我正在使用 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)))