You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET环境下SQL查询中DATE_ADD函数使用报错问题求助

问题排查
  • 函数适配错误:你参考的是MySQL的DATE_ADD函数语法,但代码中FVMASTER..trackinghistory的双点表名格式是SQL Server的语法特征,SQL Server对应的日期增减函数为DATEADD,语法为DATEADD(时间单位, 偏移量, 基准日期),和MySQL用法完全不同,这是运行失败的核心原因。
  • SQL语法错误:WHERE子句中不能出现date_added =这类赋值逻辑,WHERE仅支持条件判断表达式,同时你将函数逻辑直接拼接在字符串引号中间,没有做正确的语法连接,直接导致语句结构失效。
  • 隐含风险:直接拼接SQL字符串存在SQL注入风险,同时日期类型直接转字符串拼接极易出现时区、格式匹配错误,引发额外的运行异常。
可行实现方案

如果你需要筛选th.DateTime大于「周起始日期往前推4天」的记录,推荐优先用参数化查询实现,避免兼容性问题:

' 提前在VB侧计算好目标过滤日期
Dim targetFilterDate As DateTime = DateAdd(DateInterval.Day, -4, dtimeStartDate)
' 构造参数化SQL语句
Dim querySql As String = "
SELECT th.Thickness, odo.OptionCode
FROM FVMASTER..trackinghistory th
JOIN FVMASTER..OrderDetailOptions odo ON odo.odKey = th.odKey
JOIN FVMASTER..MasterPartOptions mpo ON mpo.Code = odo.OptionCode AND mpo.[Group] = odo.optiongroup AND mpo.QuestionKey = 'KGLASS' AND OptionType = 5
WHERE th.DateTime > @FilterDate
"
' 传入参数执行查询
sql.AddParameter("@FilterDate", targetFilterDate)
sql.runquery(querySql)

如果你需要在SQL侧完成日期计算,使用SQL Server原生DATEADD函数即可:

Dim querySql As String = "
SELECT th.Thickness, odo.OptionCode
FROM FVMASTER..trackinghistory th
JOIN FVMASTER..OrderDetailOptions odo ON odo.odKey = th.odKey
JOIN FVMASTER..MasterPartOptions mpo ON mpo.Code = odo.OptionCode AND mpo.[Group] = odo.optiongroup AND mpo.QuestionKey = 'KGLASS' AND OptionType = 5
WHERE th.DateTime > DATEADD(DAY, -4, @StartDate)
"
sql.AddParameter("@StartDate", dtimeStartDate)
sql.runquery(querySql)

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:24:03