MAP( ) 函数

返回一个逻辑值,指示一个字符串是否与包含通配符、字面量字符或两者的指定格式字符串匹配。

语法

MAP(字符串格式

参数

名称 类型 描述
字符串

字符

要测试是否匹配的域、表达式或字面量值。
格式

字符

您想要与字符串进行比较的数据模式或字符串。

格式可以包含通配符、字面量字符或两者的组合:

"\9\9\9-999-9999"

支持以下通配符:

  • "X" – 匹配所有字母字符(a-z、A-Z、欧洲字符)。此通配符不区分大小写。您可以使用 "X" 或 "x"
  • "9" – 匹配任何数字 (0-9)
  • "!" – 匹配任何非空白字符
  • "?" – 匹配任何字符,包括空白
  • "\" – 转义字符,它指定紧跟在后面的字符是字面量。如果您想要按照字面匹配任一通配符(X、x、9、!、?),请使用转义字符
  • "\\" – 指定一个字面量反斜杠

输出

逻辑。如果找到匹配项,则返回 T (真);否则返回 F(假)。

示例

基本示例

简单搜索模式

返回 T:

MAP("ABC Plumbing", "xxx")

返回 F(字符串只有 3 个数字,而最少需要 4 个):

MAP("045", "9999")

将通配符转义

如果目标是仅对那些以字面量字符 "X" 开头且后面跟任何字母的值返回 T,则格式参数 "\XX" 可确保该参数中的第一个 "X" 被按字面解释而不是解释为通配符。

返回 T:

MAP("XA-123", "XX")
MAP("GC-123", "XX")
MAP("XA-123", "\XX")

返回 F:

MAP("GC-123", "\XX")

域和模式

对于所有其发票编号由两个字母组成,或者以这两个字母开头、后面跟五个数字的记录,返回 T。否则,返回 F:

MAP(发票编号, "XX99999")

对于所有其发票编号恰好为 "AB12345" 或者以 "AB12345" 开头的记录,返回 T。否则,返回 F:

MAP(发票编号, "AB12345")

对于所有其发票编号由 "AB" 组成,或者以这 "AB" 开头、后面跟五个数字的记录,返回 T。否则,返回 F:

MAP(发票编号, "AB99999")

对于所有其 SSN 域不符合社会安全号标准格式的记录,返回 T。否则,返回 F:

NOT MAP(SSN, "999-99-9999")

高级示例

提取具有 10 字符产品代码且具有前导字符 "859-" 的记录

使用 IF 语句和 MAP( ) 函数仅提取其产品代码至少有 10 个字符长以及具有前导字符 "859-" 的那些记录:

EXTRACT RECORD IF MAP(产品代码, "85\9-999999") TO "长代码_859"

备注

何时使用 MAP( )

使用 MAP( ) 函数可在字母数值数据中搜索模式或特定格式。模式或格式可包含通配符、字面量字符或两者的组合。

区分大小写

MAP( ) 函数在比较两个字面量字符时区分大小写。例如,"a" 不等同于 "A"。

如果字符串包含大小写不一致的字符数据,则在使用 MAP( ) 之前,可使用 UPPER( ) 函数将这些值转换为大小写一致的形式。

例如:

MAP(UPPER(发票编号), "AB99999")

部分匹配

MAP( ) 在一种情况下支持部分匹配,但在另外一种情况下却不支持。

MAP( ) 的部分匹配不受精确字符比较选项 (SET EXACT ON/OFF) 的影响。

支持不完全匹配

如果格式值比字符串值短,则支持部分匹配。

返回 T,因为格式是 7 个字符,而字符串是 9 个字符:

MAP("AB1234567", "AB99999")

说明

要返回“真”,格式值必须出现在字符串值的开头。

部分匹配不受支持

如果格式值比字符串值长,则部分匹配不受支持。

返回 F,因为格式是 7 个字符,而字符串是 6 个字符:

MAP("AB1234", "AB99999")

如果格式字符串长,则结果总是“假”。

考虑空格

空格被视为字符,可采用下列两种方式之一进行处理:

  • 通过在格式值中的适当位置包括空格,按字面匹配空格
  • 使用通配符 "?" ,它匹配任何字符,包括空格

如果需要,您可以使用 TRIM( )、LTRIM( ) 或 ALLTRIM( ) 函数从字符串中删除前导或结尾空格,从而确保只比较文本字符和任何内部空格。

连接域

如果您想要在表中的一个以上的域中搜索,则可以连接字符串中的两个或更多个域。除非您使用 ALLTRIM( ) 函数删除空格,否则连接域被视为包括各个域中的前导空格和结尾空格的单个域。

ACL 脚本指南 14.1