在讨论所有可用的各种类型的模式匹配之前,有两种用于模式匹配的主要类型的ANSI标准(匹配零个或多个字符或仅匹配单个字符):
ANSI-89-主要仅由Jet SQL使用ANSI-92-主要由SQL Server和其他成人产品使用在更高版本的Access中,现在可以选择
可以选择ANSI-92兼容性,而不是ANSI-89兼容性。 在字符串比较中使用通配符内置模式匹配为进行字符串比较提供了一种多功能的工具。 下表显示了可与
像运算符和它们匹配的数字或字符串数。 表达式中的模式匹配字符 :任何单个字符-'?' [
ANSI-89 ]或'_'(下划线)[ ANSI-92 ]零个或多个字符-'*'[
ANSI-89 ]或'%'[ ANSI-92 ]任意一位数字(0-9)-'#'
字符列表中找到的任何单个字符-[字符列表]
字符列表中找不到任何单个字符-[!charlist]
您可以使用括在方括号([])中的一组一个或多个字符(字符列表)来匹配表达式中的任何单个字符,并且字符列表可以包括ANSI字符集中的几乎所有字符,包括数字。 仅当放在方括号中时,才可以使用特殊字符打开方括号([),问号(?),下划线(_),星号(*),百分号(%)和数字符号(#)进行直接匹配。 您不能在组内使用右括号(])进行自我匹配,但可以在组外将其用作单个字符。
除了用括号括起来的简单字符列表之外,charlist还可通过使用连字符(-)分隔范围的上限和下限来指定字符范围。 例如,如果表达式中的相应字符位置包含A到Z范围内的任何大写字母,则在模式中使用[AZ]会导致匹配。您可以在方括号内包括多个范围而不限制范围。 例如,[a-zA-Z0-9]与任何字母数字字符匹配。
重要的是要注意
ANSI-92 SQL通配符(%)和(_)仅在Microsoft®Jet版本4.X和Microsoft OLE DB Provider for Jet中可用。 如果通过Microsoft Access或DAO使用它们,它们将被视为文字。模式匹配的其他重要规则包括:
字符列表开头的感叹号(!)表示如果在表达式中找到了字符列表以外的任何字符,则会进行匹配。 在括号外使用时,感叹号会与其自身匹配。
您可以在字符列表的开头(如果使用了感叹号,则在其后)或字符列表的末尾使用连字符(-)进行匹配。 在任何其他位置,连字符标识一系列ANSI字符。
指定字符范围时,字符必须以升序排列(AZ或0-100)。 [AZ]是有效模式,但[ZA]不是有效模式。
字符序列[]被忽略; 它被认为是零长度的字符串(“”)。
From: https://bytes.com/topic/access/insights/677282-ansi-standards-string-comparisons