MAP( ) 函数
返回一个逻辑值,指示一个字符串是否与包含通配符、字面量字符或两者的指定格式字符串匹配。
语法
MAP(字符串,格式)
参数
名称 | 类型 | 描述 |
---|---|---|
字符串 |
字符 |
要测试是否匹配的域、表达式或字面量值。 |
格式 |
字符 |
您想要与字符串进行比较的数据模式或字符串。 格式可以包含通配符、字面量字符或两者的组合: "\9\9\9-999-9999" 支持以下通配符:
|
输出
逻辑。如果找到匹配项,则返回 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( ) 函数删除空格,否则连接域被视为包括各个域中的前导空格和结尾空格的单个域。