我在 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