PAYATHON 2026

Microsoft Access 的 Like 能在 charlist 中匹配右方括号吗?

数据阿明

在 Access 传统 Like 语法中,不能直接把 ] 放入 charlist 作为成员。要查找包含 #、? 或 ] 的文本,可以用 Or 连接原问题中的两个 Like 条件。

为什么 *[#?]]* 不符合预期?

Microsoft 的 VBA Like 文档说明,右方括号 ] 不能在字符组内部用于匹配自身,但可以在字符组外作为普通字符使用。

下面的模式:

Like "*[#?]]*"

按以下结构解析:

  • 第一个 * 匹配任意长度的前缀。
  • [#?] 匹配一个字面量 # 或 ?。
  • 接下来的 ] 匹配一个字面量右方括号。
  • 最后的 * 匹配任意长度的后缀。

这个模式要求文本中出现连续的 #] 或 ?],不能匹配三个字符中任意一个单独出现的情况。

在 Access 查询中怎么写?

在查询设计视图中,为目标字段填写以下条件:

Like "*[#?]*" Or Like "*]*"

如果直接编写 SQL,每个 Like 前都需要写出字段名。将下面的表名和字段名替换为实际名称:

SELECT [YourField]
FROM [YourTable]
WHERE (
    [YourField] Like "*[#?]*"
    OR [YourField] Like "*]*"
);

第一个条件查找包含 # 或 ? 的值,第二个条件查找包含 ] 的值。如果还要通过 AND 与其他筛选条件组合,保留这组括号可以明确逻辑关系。

在 VBA 中,同样需要分别写出待比较的字符串:

Dim s As String
Dim matched As Boolean

s = "abc]def"
matched = (s Like "*[#?]*") Or (s Like "*]*")

有哪些语法细节需要注意?

在这里使用的通配符语法中,# 和 ? 在字符列表内部匹配自身,在列表外部分别表示一个数字和任意单个字符。右方括号 ] 在字符列表外匹配自身,不需要额外处理。

上述查询示例使用 Access 的 ANSI-89 通配符,包括 * 和 ?。如果查询使用 ANSI-92 模式,需要按相应规则调整通配符。Microsoft 的 Access 通配符说明列出了两套语法及其区别。

备注:内容仅供参考。