MS Access LIKE表达式在用作MS Excel数据源时出现问题

时间:2014-10-09 15:28:53

标签: excel ms-access datasource sql-like

我创建了一个MS Access 2013查询,在查询中我有一个使用LIKE运算符的表达式。然后,我创建一个Excel 2013工作簿并选择此Access数据库作为数据源,并选择包含LIKE表达式的查询。问题是,当将数据返回到excel时,它似乎不喜欢LIKE表达式。从Access内部运行查询时,它显示正确的结果。

所以,如果我有一个看起来像这样的表达式

iif([CAR] like "*A*", True,False)

在Access中运行查询时,它将返回表中的所有CAR并显示true或false,具体取决于CAR字段中的字符串。但是,当将此查询设置为Excel数据源时,它仅返回导致false的结果(CAR字段字符串中没有A)

我知道Excel不使用LIKE运算符,但我认为Access中的查询会生成结果而Excel只使用结果。

如果您需要澄清问题,请在评论中提问。

1 个答案:

答案 0 :(得分:3)

在Access SQL-89模式下,*用作通配符,以匹配零个或多个字符的任何序列。 SQL-89模式是查询设计器的Access默认值以及从DAO运行的查询。

但Access也支持使用%而不是*作为通配符的SQL-92模式。如果您使用ADO从Excel运行查询,则使用的是SQL-92模式。

您可以采取至少3项措施来获得您期望在Excel中获得的结果:

  1. IIf([CAR] Like "%A%", True,False) - 在查询中使用此表达式可在Excel中获得预期结果。缺点是,在Access会话中运行查询时,您可能看不到相同的结果。

  2. IIf([CAR] ALike "%A%", True,False) - Alike(代替Like)表示数据库引擎需要%而不是*作为外卡,无论如何查询是从SQL-89还是92模式运行。所以这个表达式应该在Access和Excel中给你相同的结果。

  3. IIf(InStr(1, [CAR], "A", 1) > 0, True, False) - InStr并非依赖外卡字符,因此应在Access和Excel中提供相同的结果。