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