DateAdd 和日期字段不能用作查询的条件

Posted

技术标签:

【中文标题】DateAdd 和日期字段不能用作查询的条件【英文标题】:DateAdd and date fields not working as a criteria for a query 【发布时间】:2016-03-11 18:04:39 【问题描述】:

我正在处理的查询以前有效。我不知道确切的日期,因为我在同事离开时继承了它。每次运行查询时,我都会收到“条件表达式中的数据类型不匹配”。

   SELECT Personnel.Badge, Personnel.First_Name, Personnel.Last_Name, Training.Course, DateAdd("m",[Cert_Duration],[Latest_Course_Date]) AS Cert_Expiration, Personnel.Reports_To
FROM Training INNER JOIN (Personnel INNER JOIN qry_Training_Log_Latest_Course ON Personnel.Badge = qry_Training_Log_Latest_Course.Personnel) ON Training.Training_ID = qry_Training_Log_Latest_Course.Course
WHERE (((DateAdd("m",[Cert_Duration],[Latest_Course_Date]))<DateAdd("m",6,Date())) AND ((Training.Cert_Duration) Is Not Null));

出现了这条线

如有任何反馈,我将不胜感激。

【问题讨论】:

1) 你确定是DateAdd 函数和日期字段吗? 2)该字段的任何数据类型最近是否发生了变化? 这有什么改变吗? SELECT Personnel.Badge, Personnel.First_Name, Personnel.Last_Name, Training.Course, DateAdd("m",[Cert_Duration],[Latest_Course_Date]) AS Cert_Expiration, Personnel.Reports_To FROM ((Training INNER JOIN Personnel ON Training.Training_ID = qry_Training_Log_Latest_Course.Course) INNER JOIN qry_Training_Log_Latest_Course ON Personnel.Badge = qry_Training_Log_Latest_Course.Personnel) WHERE (((DateAdd("m",[Cert_Duration],[Latest_Course_Date]))&lt;DateAdd("m",6,Date())) AND ((Training.Cert_Duration) Is Not Null)); 当我尝试使用你的代码时,它给出了一个连接语法错误。 【参考方案1】:

此查询还触发“条件表达式中的数据类型不匹配。”

SELECT DateAdd("m", Null, Date());

因此,您的错误可能是由此表达式中的 Null [Cert_Duration] 值引起的...

DateAdd("m",[Cert_Duration],[Latest_Course_Date])

您需要将查询修改为...

    在评估DateAdd() 之前排除具有 Null [Cert_Duration] 值的行。 或者用其他东西代替该表达式中的 Null [Cert_Duration] 值。

【讨论】:

HansUP,您为我指明了正确的方向。幸运的是,被引用的类别只有 6 个条目,因此我能够按 Training.Training_ID 进行过滤。一旦我这样做了,查询就完美无缺。

以上是关于DateAdd 和日期字段不能用作查询的条件的主要内容,如果未能解决你的问题,请参考以下文章

数据库日期字段选择 long和datatime 哪个效率高

sql 语句如何插入全年日期?

使用日期字段提高查询执行的性能

如何项sql数据库中添加一年的日期

sql语句怎么来对日期进行相加减

CakePHP 查找两个日期之间查询的条件