MATCH( ) 函数

返回一个逻辑值,表明指定的值是否和与其相比较的任一值相匹配。

语法

MATCH(比较值测试 <,……n>)

参数

名称 类型 描述
比较值

字符

数值

日期时间

要测试是否匹配的域、表达式或字面量值。
测试 <,...n>

字符

数值

日期时间

您想要将其与比较值相比较的任何域、表达式或字面量值。

您可以指定足够多的测试值,但是所有指定值必须具有相同的数据类型:

MATCH(比较值, `20140930`, `20141030`)

说明

MATCH( ) 函数的输入可以是字符、数值或日期时间数据。您不能混用数据类型。所有输入都必须属于同一个数据类别。

输出

逻辑。返回 T (正确的),前提至少找到一个匹配项;反之则返回 F(错误的)。

示例

基本示例

说明

除非特别说明,字符比较的返回值假定 SET EXACT 为 OFF(默认设置)。

测试字面量值

返回 T:

MATCH("ABC", "BCD", "CDE", "AB")

返回 F:

MATCH(98, 99, 100, 101)

测试域

对于在供应商城市域中包含 "Phoenix"、"Austin" 或 "Los Angeles" 的所有记录,返回 T。否则,返回 F:

MATCH(供应商城市, "Phoenix", "Austin", "Los Angeles")

对于在供应商城市域中不包含 "Phoenix"、"Austin" 或 "Los Angeles" 的所有记录,返回 T。否则,返回 F:

NOT MATCH(供应商城市, "Phoenix", "Austin", "Los Angeles")

对于在供应商城市域中包含 "PHOENIX"、"AUSTIN" 或 "LOS ANGELES" 的所有记录,返回 T,而无论该域中任何字符的大小写如何。否则,返回 F:

在与用大写形式表示的城市名称比较之前,会将供应商城市域中的值转换成大写形式。

MATCH(UPPER(供应商城市), "PHOENIX", "AUSTIN", "LOS ANGELES")

测试多个域

对于在供应商城市城市城市_2域中包含 "Phoenix" 的所有记录,返回 T。否则,返回 F:

MATCH("Phoenix", 供应商城市, 城市, 城市_2)

SET EXACT 行为

对于所有在产品代码域中包含产品代码 "A"、"D" 或 "F" 或以 "A"、"D" 或 "F" 开头的产品代码的记录,返回 T。否则,返回 F:

MATCH(产品代码, "A", "D", "F")

对于所有在产品代码域中包含单字符产品代码 "A"、"D" 或 "F" 的记录,返回 T。否则,返回 F(SET EXACT 必须为 ON):

MATCH(产品代码, "A", "D", "F")

比较两个域

对于包含完全相同的供应商地址和员工地址的所有记录,返回 T。否则,返回 F:

您可能需要使用附加函数来标准化供应商地址和员工地址的格式。

MATCH(供应商地址, 员工地址)

比较日期

对于其发票日期为 2014 年 9 月 30 日或 2014 年 10 月 30 日的所有记录,返回 T。否则,返回 F:

MATCH(发票日期, `20140930`, `20141030`)

高级示例

提取反常的库存记录

使用 IF 语句和 MATCH( ) 函数可提取在 Inventory_Value_at_Cost 域和 Cost_x_Quantity 计算域中包含不同金额的记录:

EXTRACT RECORD IF NOT MATCH(Inventory_Value_at_Cost, Cost_x_Quantity) TO "Non_matching_amounts"

提取部门 101、103 和 107 的记录

使用 IF 语句和 MATCH( ) 函数仅提取与部门 101、103 或 107 相关联的记录:

EXTRACT RECORD IF MATCH(部门, "101", "103", "107") TO "三个部门"

备注

使用 MATCH( ) 而不是 OR 运算符

您可以使用 MATCH( ) 函数来替代使用 OR 运算符的表达式。

例如:

MATCH(城市, "Phoenix", "Austin", "Los Angeles")

等效于

城市="Phoenix" OR 城市="Austin" OR 城市="Los Angeles"

数值输入的小数精度

当要比较的数值输入具有不同的小数精度时,比较运算将使用较高水平的精度。

返回 T,因为 1.23 等于 1.23:

MATCH(1.23, 1.23, 1.25)

返回 F,因为一旦考虑第三个小数位,则 1.23 不等于 1.234:

MATCH(1.23, 1.234, 1.25)

字符参数

区分大小写

在与字符数据共同使用时,MATCH( ) 函数区分大小写。当它比较字符时,"a" 不等于 "A"。

返回 F:

MATCH("a","A","B","C")

如果您使用大小写不一致的数据,则在使用 MATCH( ) 之前,可使用 UPPER( ) 函数将值转换为大小写一致的形式。

返回 T:

MATCH(UPPER("a"), UPPER("A"), UPPER("B"),  UPPER("C"))

部分匹配

对于字符比较,支持不完全匹配。所比较的任一值都可被另一个值包含且被视为匹配项。

下面的两个示例都返回 T:

MATCH("AB", "ABC")
MATCH("ABC", "AB")

说明

较短的值必须出现在较长值的开头才能形成匹配。

部分匹配和 SET EXACT

当 SET EXACT = OFF(这是 Analytics 默认设置)时,部分匹配被启用。如果 SET EXACT = ON,不完全匹配被禁用,比较值必须完全匹配才能构成匹配。

当 SET EXACT 为 ON 时,上述两个示例都为假。

有关 SET EXACT(精确字符比较选项)的更多信息,请参见 SET 命令

打开或关闭 SET EXACT

如果您想要确保精确字符比较选项不与 MATCH( ) 函数共同使用,请在选项对话框( 工具 > 选项)中的选项卡中检查是否已取消选择该选项。

如果您使用脚本,您可以在 MATCH( ) 函数出现之前添加 SET EXACT OFF 命令。如果需要,您可以使用 SET EXACT ON 命令恢复之前的状态。

日期时间参数

被指定为函数输入的日期、日期时间或时间域都可以使用任何日期、日期时间或时间格式,前提是域定义正确定义了该格式。

混用日期、日期时间和时间输入

您可以在 MATCH( ) 函数的输入中混用日期、日期时间和时间值,但混用这些日期时间子类型可能得到无意义的结果。

Analytics 使用序列号等效值来处理日期时间计算,因此,即使您只对日期时间值的日期部分感兴趣,时间部分仍然构成计算的一部分。

请看下面的示例:

返回 T,因为 2014 年 12 月 31 日匹配第二个测试值:

MATCH(`20141231`,`20141229`,`20141231`)

返回 F,即使比较值和第二个测试值具有完全相同的日期 2014 年 12 月 31 日:

MATCH(`20141231 120000`,`20141229`,`20141231`)

如果我们考察这两个表达式的序列号等效值,我们可以明白为什么第二个表达式的结果为假。

返回 T,因为序列号比较值等于第二个序列号测试

MATCH(42003.000000, 42001.000000, 42003.000000)

返回 F,因为序列号比较值不等于任何测试值:

MATCH(42003.500000, 42001.000000, 42003.000000)

序列号 42003.50000042003.000000 的日期部分匹配,但时间部分不匹配。0.500000 是等于 12:00 PM 的序列号。

协调日期时间子类型

要避免混用日期时间子类型可能导致的问题,您可以使用函数协调子类型。

例如,以下表达式使用与上面的第二个示例相同的初始值,但返回 T 而非 F:

MATCH(CTOD(DATE(`20141231 120000`,"YYYYMMDD"),"YYYYMMDD"),`20141229`, `20141231`)

指定字面量日期、日期时间或时间值

在为任何函数输入指定字面量日期、日期时间或时间值时,您必须使用下表中的格式,并且必须将值放在反引号中 — 例如,`20141231`

在日期或时间的各个部分之间,不要使用任何分隔符,如斜杠 (/) 或冒号 (:)。

  • 日期时间值 - 您可以使用日期、分隔符和下表列出的时间格式的任意组合。日期必须位于时间前面,并且您必须在两者之间使用分隔符。有效分隔符是单个空格、字母 't' 或字母 'T'。

  • 时间值 – 您必须使用 24 小时时钟指定时间。协调世界时 (UTC) 偏移量前面必须带有加号 (+) 或减号 (-)。

    格式示例

    字面值示例

    YYYYMMDD

    `20141231`

    YYMMDD

    `141231`

    YYYYMMDD hhmmss

    `20141231 235959`

    YYMMDDthhmm

    `141231t2359`

    YYYYMMDDThh

    `20141231T23`

    YYYYMMDD hhmmss+/-hhmm

    (UTC 偏移量)

    `20141231 235959-0500`

    YYMMDD hhmm+/-hh

    (UTC 偏移量)

    `141231 2359+01`

    thhmmss

    `t235959`

    Thhmm

    `T2359`

    说明

    请勿在包含 UTC 偏移量数据的主时间格式中单独使用 hh。例如,请避免:hh+hhmm。结果可能不可靠。

     

ACL 脚本指南 14.1