【问题标题】:MS Access LIKE expression has issue when used as MS Excel data-sourceMS Access LIKE 表达式在用作 MS Excel 数据源时存在问题
【发布时间】:2014-12-04 14:44:10
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: excel ms-access datasource sql-like


    【解决方案1】:

    在 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 中应该会得到相同的结果。

    【讨论】:

    • 谢谢,这正是我所需要的
    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多