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

Kri*_*one 3 excel ms-access datasource sql-like

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

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

iif([CAR] like "*A*", True,False)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Han*_*sUp 5

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

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

要在 Excel 中获得预期的结果,您至少可以做 3 件事:

  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 中为您提供相同的结果。