vba代码中sql提取数据,设定时间范围时报错?
好像这句有问题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语句中带变量不能直接用,只能单引号里面再加双引号,同时再用字符&连接
这样写:'"& 变量 &"'