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 通配符说明列出了两套语法及其区别。
备注:内容仅供参考。
