SEARCH 函数

返回最先找到特定字符或文本字符串的位置的字符编号(从左向右算起)。 搜索不区分大小写,但区分重音。

语法

SEARCH(<find_text>, <within_text>[, [<start_num>][, <NotFoundValue>]])

参数

定义

find_text

要查找的文本。

可以在查找文本中使用通配符,即可以使用问号 (?) 和星号 (*)。 问号匹配任何单个字符;星号匹配任何字符序列。 如果您想要查找实际的问号或星号,则在字符前键入代字号 (~)。

within_text

要在其中搜索 find_text 的文本或包含文本的列。

start_num

(可选)要在 within_text 中开始搜索的字符位置。 如果省略,则为 1。

NotFoundValue

(可选)在运算未找到匹配的子字符串时应返回的值,通常为 0、-1 或 BLANK()。

返回值

第一个文本字符串在第二个文本字符串中从第一个字符算起的起始位置编号。

注释

  1. 搜索函数不区分大小写。 搜索“N”将找到“N”或“n”的第一个匹配项。

  2. 搜索函数区分重音。 搜索“á”将找到“á”的第一个匹配项,但不会找到“a”、“à”的匹配项或者大写版本“A”、“Á”。

  3. 通过使用此函数,您可以在第二个文本字符串中找到一个文本字符串,并且返回第一个字符串的起始位置。

  4. 您可以使用 SEARCH 函数确定一个字符或文本字符串在另一个文本字符串内的位置,然后使用 MID 函数返回文本,或者使用 REPLACE 函数更改文本。

  5. 如果在 within_text 中找不到 find_text,则该公式将返回错误。 此行为与 Excel 类似,后者在找不到子字符串的情况下将返回 #VALUE。 within_text 中的 Null 将在此上下文中解释为空字符串。

在以 DirectQuery 模式部署然后查询的模型中使用时,此 DAX 函数可返回不同的结果。 有关 DirectQuery 模式下的语义差异的详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkId=219171

示例:在字符串内搜索

说明

下面的公式查找字母“n”在单词“printer”中的位置。

代码

=SEARCH("n","printer")

注释

该公式将返回 4,因为“n”是单词“printer”中的第四个字符。

示例:在列内搜索

说明

您可以使用列引用作为 SEARCH 的参数。 下面的公式查找字符“-”(连字符)在列 [PostalCode] 中的位置。

代码

=SEARCH("-",[PostalCode])

注释

返回结果是一个数字列,指示连字符的索引位置。

示例:针对 SEARCH 的错误处理

说明

如果在源列的每一行中都找不到搜索字符串,则前面示例中的公式将失败。 因此,下一个示例将说明如何将 IFERROR 与 SEARCH 函数一起使用,以便确保为每一行都返回有效结果。

下面的公式查找字符“-”在列中的位置,并且找不到该字符串则返回 -1。

代码

= IFERROR(SEARCH("-",[PostalCode]),-1)

注释

请注意,您用作错误输出的值的数据类型必须匹配非错误输出类型的数据类型。 在此情况下,您提供在出现错误时要输出的数值,因为 SEARCH 将返回整数值。

但是,您还可以通过使用 BLANK() 作为 IFERROR 的第二个参数,返回空白(空字符串)。

请参阅

参考

MID 函数

REPLACE 函数

其他资源

文本函数 (DAX)