MS Access 的 LIKE 表达式在作为 MS Excel 数据源时存在问题

3
我已经创建了一个 MS Access 2013 查询,在查询中使用了 LIKE 运算符的表达式。然后,我创建了一个 Excel 2013 工作簿,并将此 Access 数据库选为数据源,选择包含 LIKE 表达式的查询。问题是,当将数据返回到 Excel 时,它似乎不喜欢 LIKE 表达式。从 Access 内运行查询时,结果是正确的。
因此,如果我的表达式如下:
iif([CAR] like "*A*", True,False)

它将返回表中所有CAR,并根据运行Access查询时CAR字段中的字符串是true还是false显示。但是,当将此查询设置为Excel数据源时,它仅返回结果为false(CAR字段字符串中没有A)的结果。我知道Excel不使用LIKE运算符,但我认为Access中的查询会产生结果,而Excel只使用结果。如果您需要澄清问题,请在评论中提出。
2个回答

5
在Access SQL-89模式下,*用作通配符,可以匹配任意零个或多个字符的序列。SQL-89模式是查询设计器和从DAO运行的查询的默认设置。
但是,Access还支持使用%代替*作为通配符的SQL-92模式。如果您正在使用ADO从Excel运行查询,则它将使用SQL-92模式。
有至少三种方法可以在Excel中获得预期结果:
1.使用表达式IIf([CAR] Like "%A%", True,False)在查询中使用此表达式以在Excel中获得预期结果。缺点是当在Access会话中运行查询时可能看不到相同的结果。
2.使用表达式IIf([CAR] ALike "%A%", True,False) - 告诉数据库引擎使用%而不是*作为通配符,而不管查询是从SQL-89还是92模式运行。因此,这个表达式应该在Access和Excel中都给出相同的结果。
3.使用表达式IIf(InStr(1, [CAR], "A", 1) > 0, True, False) - InStr不依赖于通配符,因此应该在Access和Excel中给出相同的结果。

谢谢,这正是我所需要的。 - kire38

0

我假设你已经尝试使用WHERE子句来搜索所有至少有一个字母'A'的汽车。

如果是这种情况,我找到的解决方案是在WHERE子句中同时使用'*''%'。通过这样做,查询可以在MS AccessExcel中运行。

例如,当你想要获取所有带有字母'A'的汽车时,请使用以下查询:

   SELECT * FROM <Table>
    WHERE CAR LIKE "*A*" OR CAR LIKE "%A%";

当你想要获取所有没有字母'A'的汽车时,请使用以下查询:
   SELECT * FROM <Table>
    WHERE NOT CAR LIKE "*A*" AND NOT CAR LIKE "%A%";

这样,当您在MS Access中执行查询时,WHERE子句的LIKE "\*A\*"部分将被使用。
另一方面,在Excel中运行时,将评估LIKE "%A%"部分。
在两种情况下,WHERE子句的其他部分都会对所有行返回true。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接