vba代码中sql提取数据,设定时间范围时报错,如何解决?

vba代码中sql提取数据,设定时间范围时报错?

img

img

img

好像这句有问题where DATE(销售日期) >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)",没有where后面的语句一切正常

你的这个写法貌似oracle得,微软系没这个写法,直接datediff,你可以百度下

Sql = "select date(销售日期) from [sheet$] "
也报错
好像 date(销售日期)写法不被允许
datediff也不行,where datediff(curdate(),date(销售日期)) <= 30"也报错,说行数参数个数不对

select * from [sheet$] where datediff(d,销售日期,getdate())<=30
select * from [sheet$] where datediff(d,销售日期,now())<=30
这两种在vba中直接用都报错了

我测试以下这种写法可以不报错,得到结果:

Dim a, c
a = Format(Now, "yyyy-mm-dd")    'now是当前时间,format函数设置时间格式
c = DateAdd("d", -30, a)     '距离某一时间向后或向前推算多少天.取值格式为2023/04/23
c = Format(c, "yyyy-mm-dd")   '时间格式要统一,如果是2023/04/23,可能计算会认为只取2023年,会把大于2023年全部数据调出
Sql = "select *  from [sheet$] where  销售日期> '" & c & "'"
arr = xxxx.Execute(Sql).GetRows 

或者直接写成

Sql = "select *  from [sheet$] where  销售日期> '" & Format(DateAdd("d", -30, Now), "yyyy-mm-dd") & "'"

这样可以执行数据,似乎在vba中使用select语句中带变量不能直接用,只能单引号里面再加双引号,同时再用字符&连接
这样写:'"& 变量 &"'

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^