MS Access数据类型不匹配报错:简单整数比较问题
解决“条件表达式中数据类型不匹配”报错问题
出现这个报错的核心原因大概率和[Last_Updated]字段的类型或内容有关,以下是具体分析和解决办法:
可能的问题根源
- 字段类型不匹配:如果
[Last_Updated]是文本类型而非日期/时间类型,即使内容看起来像日期,DateValue()转换时可能遇到无法解析的字符串,导致生成非预期的数据类型,后续的datediff和int转换会触发类型冲突。 - 存在无效日期值:即使字段是文本类型,部分记录的字符串不符合标准日期格式,
DateValue()转换失败后会产生错误类型的数据,引发条件判断时的类型不匹配。
解决方案
方案1:过滤无效日期记录
在子查询中增加IsDate()判断,只保留能正常转换为日期的记录:
SELECT * INTO Updated FROM ( SELECT a.*, date() AS [Today], DateValue([Last_Updated]) as [LastUpDateDate], int(datediff("d", date(), DateValue([Last_Updated]))) as [mydatediff] FROM Prior AS a WHERE a.[Last_Updated] is not null AND IsDate([Last_Updated]) = True ) t WHERE t.[mydatediff] >= 1;
方案2:直接使用日期字段(如果字段本身是日期类型)
如果[Last_Updated]本身就是日期/时间类型,无需用DateValue()转换,去掉后可避免多余的类型转换风险:
SELECT * INTO Updated FROM ( SELECT a.*, date() AS [Today], [Last_Updated] as [LastUpDateDate], int(datediff("d", date(), [Last_Updated])) as [mydatediff] FROM Prior AS a WHERE a.[Last_Updated] is not null ) t WHERE t.[mydatediff] >= 1;
方案3:检查并修正字段类型
如果确认[Last_Updated]应该存储日期数据,直接将字段类型修改为日期/时间型,从根源避免转换问题。
内容的提问来源于stack exchange,提问作者JaredS
相关产品推荐
相关产品推荐

