MS 访问 SQL 'Data type mismatch in criteria expression'由于在子查询中过滤掉了空值



我在 Access 数据库中有一个表,其中包含一个格式为"0000"、"0000-00"或 null 的短文本列。我需要根据前四个数字进行查询,并尝试了以下方法:

SELECT *
FROM 
(
SELECT *
FROM Table1
WHERE Field1 IS NOT NULL
)
WHERE Val(LEFT(Field1,4)) > 1002

此查询返回"条件表达式中的数据类型不匹配"。我几乎可以肯定这是由空值引起的,因为在测试用例中,我可以通过从表的副本中删除空值(即删除记录(来使查询工作。

我还验证了内部查询仅返回 Field1 不为 null 的记录。

在我看来,查询引擎的执行顺序可能不符合查询中指定的顺序?还是我做错了什么?

使用 LIKE

SELECT *
FROM Table1
WHERE Field1 LIKE "1002*"

NULL值几乎无法通过所有比较,因此不需要单独的NULL比较。 子查询是不必要的。

对于不相等,您应该只能使用字符串比较:

WHERE field1 > "1002"

这将匹配"1002-00"。 如果您不想这样,请使用LEFT()

WHERE LEFT(field1, 4) > "1002"

也有效:

SELECT *
FROM Table1
WHERE IIF(Field1 IS NULL, 0, Val(LEFT(Field1,4))) > 1002

相关内容

  • 没有找到相关文章

最新更新