Access 2007中使用DATEADD函数出现语法错误求助
Access 2007 查询中添加2个工作日的解决办法
你碰到的编译错误,主要是两个问题:一是Access查询表达式里,DATEADD的间隔参数用双引号容易出现识别问题,二是你用错了DATEADD的间隔类型——"w"根本不是用来添加工作日的,它的作用是把日期往后推指定周数的同星期几,和你要的跳过周末的需求完全不匹配。
下面给你两种不用VBA就能实现需求的方法:
方法1:纯表达式判断(无需额外加载库)
如果只需要排除周六周日、不用考虑节假日,直接用嵌套IIf写逻辑:
NewWorkDate: IIf(Weekday([MyDateField], vbMonday) = 5, [MyDateField]+4, IIf(Weekday([MyDateField], vbMonday) = 6, [MyDateField]+3, [MyDateField]+2))
简单说明:
Weekday([MyDateField], vbMonday)将周一设为一周的第1天,周五对应第5天,周六对应第6天- 原日期是周五时加4天:跳过周六、周日,直接到下周二
- 原日期是周六时加3天:直接到下周二
- 其他日期直接加2天即可
方法2:用内置Workday函数(更简洁)
Access 2007支持Workday函数,但需要先加载对应库:
- 打开查询设计视图,点开表达式生成器
- 点击「工具」→「引用」,勾选「Microsoft Office xx.x Access Database Engine Object Library」(xx.x为你的Office版本号),点击确定
- 之后直接使用:
NewWorkDate: Workday([MyDateField], 2)
这个函数会自动跳过周六和周日,如果需要排除节假日,还可以添加第三个参数指定节假日的日期集合。
另外提一句,如果你原本是想给日期加2周,正确写法应该是DATEADD('ww',2,[MyDateField])(用单引号包裹间隔参数),但这和你要的工作日需求无关。
内容的提问来源于stack exchange,提问作者Fordy
相关产品推荐
相关产品推荐

