不区分大小写的搜索遵循英语的大小写转换规则。例如,英语中的小写
i 的大写形式是
I,而土耳其语中则是 İ——对于英语以外的语言,结果可能不符合预期。haystack) 和搜索字符串 (本节中称为 needle) 都是单字节编码文本。如果这一假设
不成立,不会抛出异常,结果未定义。对 UTF-8 编码字符串的搜索通常由单独的函数
变体提供。同样,如果使用 UTF-8 函数变体,而输入字符串并非 UTF-8 编码文本,也不会抛出异常,且
结果未定义。请注意,不会自动执行 Unicode 规范化,不过你可以使用
normalizeUTF8*() 函数来实现这一点。
通用字符串函数 和 字符串替换函数 将单独介绍。
以下文档由
system.functions 系统表生成。countMatches
引入版本:v21.1.0 返回字符串中正则表达式的匹配次数。此函数的行为取决于 ClickHouse 版本:
- 在 < v25.6 的版本中,即使模式能够匹配空字符串,函数也会在第一次空匹配时停止计数。
- 在 >= 25.6 的版本中,发生空匹配时,函数会继续执行。可使用设置
count_matches_stop_at_empty_match = true恢复旧版行为;
UInt64
示例
统计数字串的数量
Query
Response
countMatchesCaseInsensitive
引入版本:v21.1.0 与countMatches 类似,但执行不区分大小写的匹配。
语法
haystack— 要在其中搜索的字符串。Stringpattern— 正则表达式模式。const String
UInt64
示例
不区分大小写的计数
Query
Response
countSubstrings
引入版本:v21.1.0 返回子串needle 在字符串 haystack 中出现的频次。
语法
haystack— 要在其中执行搜索的 String。String 或 枚举。 -needle— 要搜索的子串。String。 -start_pos— 在haystack中开始搜索的位置 (从 1 开始计数) 。UInt。可选。
UInt64
示例
使用示例
Query
Response
Query
Response
countSubstringsCaseInsensitive
引入版本:v21.1.0 与countSubstrings 类似,但按不区分大小写的方式计数。
语法
haystack— 执行搜索的字符串。String或枚举needle— 要搜索的子串。Stringstart_pos— 可选。在haystack中开始搜索的位置 (从 1 开始计数) 。UInt*
needle 在 haystack 中出现的次数。UInt64
示例
使用示例
Query
Response
Query
Response
countSubstringsCaseInsensitiveUTF8
Introduced in: v21.1.0 与countSubstrings 类似,但以不区分大小写的方式进行计数,并假定 haystack 为 UTF-8 字符串。
Syntax
haystack— 执行搜索的 UTF-8 字符串。String或枚举needle— 要搜索的子串。Stringstart_pos— 可选。在haystack中开始搜索的位置 (从 1 开始) 。UInt*
needle 在 haystack 中出现的次数。UInt64
示例
使用示例
Query
Response
Query
Response
extract
Introduced in:v1.1.0 提取字符串中第一个匹配正则表达式的内容。 如果 ‘haystack’ 与 ‘pattern’ 不匹配,则返回空字符串。 此函数使用 RE2 regular expression 库。支持的语法请参阅 re2。 如果正则表达式包含 捕获组 (子模式) ,则函数会返回输入字符串中与第一个 捕获组 匹配的内容。 Syntaxhaystack— 要从中提取内容的 String。Stringpattern— 正则表达式,通常包含一个捕获组。const String
String
示例
从电子邮件地址中提取域名
Query
Response
Query
Response
extractAll
引入于:v1.1.0 与extract 类似,但返回字符串中匹配正则表达式的所有结果组成的数组。
如果 ‘haystack’ 不匹配 ‘pattern’ 正则表达式,则返回空数组。
如果正则表达式包含捕获组 (子模式) ,则该函数会针对第一个捕获组匹配输入字符串。
语法
haystack— 要从中提取片段的 String。Stringpattern— 正则表达式,可包含捕获组。const String
Array(String)
示例
提取所有数字
Query
Response
Query
Response
extractAllGroupsHorizontal
引入版本:v20.5.0 使用提供的正则表达式匹配字符串中的所有组,并返回一个嵌套数组,其中每个数组包含同一捕获组的所有捕获结果,按组号排列。 语法s— 要从中提取内容的输入字符串。String或FixedStringregexp— 用于匹配的正则表达式。const String或const FixedString
Array(Array(String))
示例
用法示例
Query
Response
extractGroups
Introduced in: v20.5.0 从正则表达式匹配到的第一个子串中提取捕获组。要从所有匹配结果中提取捕获组,请使用extractAllGroupsHorizontal 或 extractAllGroupsVertical。
Syntax
s— 要从中提取内容的输入字符串。String或FixedStringregexp— 正则表达式。必须至少包含一个捕获组。常量。const String或const FixedString
1 到 N,其中 N 为 regexp 中捕获组的数量) 。如果没有匹配,则返回空数组。Array(String)
示例
使用示例
Query
Response
hasAllTokens
引入版本:v25.10.0 与hasAnyTokens 类似,但仅当 needle 字符串或数组中的所有标记都与 input 字符串匹配时返回 1,否则返回 0。如果 input 是一列,则返回满足此条件的所有行。
列
input 应定义一个文本索引以获得最佳性能。
如果未定义文本索引,该函数会对该列执行穷举列扫描,其速度比索引查找慢几个数量级。input参数 (始终如此) 以及needle参数 (如果为 String) 会使用为文本索引指定的分词器进行处理。 如果该列未定义文本索引,则会改用splitByNonAlpha分词器。 如果needle参数的类型为 Array(String),则数组中的每个元素都会被视为一个标记——不会再进行额外的标记化。 如果文本索引配置了预处理器表达式,则会在标记化之前将预处理器应用到 needle (如果其类型为String) 。 如果文本索引配置了后处理器表达式,则会将后处理器应用到 needle 标记和 input 标记 (即两者都在标记化之后处理) 。
当文本索引定义了一个预处理器 (例如
lowerUTF8) 时,hasAllTokens 会将其应用于 input;如果 needles 是 String,则也会在标记化之前将其应用于 needles。当 needles 是 Array(String) 时,其元素会按原样传递,不会对其应用预处理器。
预处理器仅在文本索引路径上生效,因此,使用文本索引的查询与不使用文本索引的查询,结果可能会有所不同 (例如 SETTINGS use_skip_indexes = 0) 。
为提高全文检索的易用性,这种不一致是可以接受的。hasAllToken
参数
input— 输入列。String、FixedString、Nullable(String)、Nullable(FixedString)、Array(String)、Array(FixedString)、Array(Nullable(String))或Array(Nullable(FixedString))needles— 待搜索的标记。String或Array(String)tokenizer— 使用的分词器。有效参数包括splitByNonAlpha、splitByString、splitByRegexp、asciiCJK、chinese、icu('<locale>')、japanese、ngrams、sparseGrams和array。可选;如果未显式设置,默认为splitByNonAlpha。const String
UInt8
示例
使用字符串 needle 的基本用法
Query
Response
Query
Response
tokens 函数生成 needles
Query
Response
Query
Response
Query
Query
Response
Query
Response
Query
Response
hasAnyTokens
引入版本:v25.10.0 如果needle 字符串或数组中至少有一个标记与 input 字符串匹配,则返回 1,否则返回 0。如果 input 是一列,则返回满足此条件的所有行。
列
input 应定义 文本索引,以获得最佳性能。
如果未定义文本索引,该函数会对列执行穷举列扫描,其速度比索引查找慢几个数量级。input参数 (始终如此) ,以及needle参数 (如果其类型为 String) 会使用为文本索引指定的分词器进行分词。 如果该列未定义文本索引,则会改用splitByNonAlpha分词器。 如果needle参数的类型为 Array(String),则会将数组中的每个元素视为一个标记——不会再进行额外标记化。 如果文本索引配置了 预处理器 表达式,则会在标记化前将预处理器应用于needle(如果其类型为String)。 如果文本索引配置了 后处理器 表达式,则会在标记化后将后处理器应用于needle标记和input标记 (即两者都会应用)。
当文本索引定义了预处理器 (例如
lowerUTF8) 时,hasAnyTokens 会在标记化前将其应用于 input;当 needles 为 String 时,也会将其应用于 needles。当 needles 为 Array(String) 时,其元素会按原样传递,不会对其应用预处理器。
预处理器仅在文本索引路径上应用,因此,使用文本索引的查询与不使用文本索引的查询之间的结果可能不同 (例如 SETTINGS use_skip_indexes = 0) 。
为了提高全文检索的易用性,可以容忍这种不一致性。hasAnyToken
参数
input— 输入列。String或FixedString或Nullable(String)或Nullable(FixedString)或Array(String)或Array(FixedString)或Array(Nullable(String))或Array(Nullable(FixedString))needles— 待搜索的标记。String或Array(String)tokenizer— 使用的分词器。有效参数包括splitByNonAlpha、splitByString、splitByRegexp、asciiCJK、chinese、icu('<locale>')、japanese、ngrams、sparseGrams和array。该参数为可选项;如果未显式设置,则默认为splitByNonAlpha。const String
1,否则返回 0。UInt8
示例
使用字符串 needle 的基本示例
Query
Response
Query
Response
tokens 函数生成 needles
Query
Response
Query
Query
Response
Query
Response
Query
Response
hasPhrase
引入版本:v26.4.0 检查input 是否按连续顺序包含 phrase 中的所有标记。
为获得最佳性能,列
input 应定义 文本索引。
如果未定义 文本索引,该函数会执行穷举列扫描,其速度比索引查找慢几个数量级。input 和 phrase 参数进行标记化。
如果该列未定义 文本索引,则改用 splitByNonAlpha 分词器——除非通过可选的第三个参数提供了分词器。
tokenizer 参数必须是 splitByNonAlpha、splitByString、splitByRegexp、ngrams、asciiCJK 或 icu 之一。
请注意,当 文本索引 还定义了后处理器时,hasPhrase 不支持 splitByRegexp。
当 文本索引 定义了 预处理器 (例如
lowerUTF8) 时,hasPhrase 会在标记化前将其应用于 input 和 phrase。
预处理器仅在 文本索引 路径上生效,因此,使用 文本索引 的查询与不使用 文本索引 的查询,结果可能不同 (例如 SETTINGS use_skip_indexes = 0) 。
为了提高全文检索的易用性,可以容忍这种不一致。hasToken、hasAnyTokens 和 hasAllTokens 不同,hasPhrase 要求这些标记按相同顺序连续出现,
中间不能有任何其他标记。例如,hasPhrase('the quick brown fox', 'quick fox') 返回 0,
因为 “brown” 出现在 “quick” 和 “fox” 之间。
语法
matchPhrase
参数
input— 输入列。String或FixedStringphrase— 要搜索的短语。const Stringtokenizer— 使用的分词器。可选,默认为splitByNonAlpha。const String
1;否则返回 0。UInt8
示例
短语匹配
Query
Response
Query
Response
hasSubsequence
Introduced in: v23.7.0 检查 needle 是否是 haystack 的子序列。 字符串的子序列,是指在不改变其余字符顺序的前提下,通过删除另一个字符串中的部分字符或不删除任何字符得到的序列。 Syntax1,否则返回 0。UInt8
示例
基本的子序列检查
Query
Response
Query
Response
hasSubsequenceCaseInsensitive
引入版本:v23.7.0 与hasSubsequence 类似,但搜索时不区分大小写。
语法
UInt8
示例
使用示例
Query
Response
hasSubsequenceCaseInsensitiveUTF8
引入版本:v23.7.0 与hasSubsequenceUTF8 类似,但搜索时不区分大小写。
语法
needle 是 haystack 的子序列,则返回 1;否则返回 0。UInt8
示例
使用示例
Query
Response
hasSubsequenceUTF8
引入版本:v23.7.0 与hasSubsequence 类似,但假设 haystack 和 needle 是以 UTF-8 编码的字符串。
语法
needle 是 haystack 的子序列,则返回 1;否则返回 0。UInt8
示例
用法示例
Query
Response
Query
Response
hasToken
引入版本:v20.1.0在使用非
splitByNonAlpha 分词器和/或 预处理器/后处理器 表达式的文本索引中进行查找时,hasToken 存在一些隐患。
我们建议改用 hasAnyTokens 和 hasAllTokens。[0-9A-Za-z_] (数字、ASCII 字符和下划线) 构成的最长子序列。
语法
haystack— 被搜索的字符串。Stringtoken— 要查找的标记。const String
1;否则返回 0。UInt8
示例
标记搜索
Query
Response
hasTokenCaseInsensitive
引入版本:v20.1.0 使用 tokenbf_v1 索引在 haystack 中执行对 needle 的不区分大小写查找。此函数在配合非
default 分词器以及预处理器或后处理器表达式时存在一些陷阱。
我们建议改用 hasAnyTokens 和 hasAllTokens。- 无。
hasTokenCaseInsensitiveOrNull
引入版本:v23.1.0 使用 tokenbf_v1 索引在 haystack 中不区分大小写地查找 needle。如果 needle 的格式不合法,则返回 NULL。该函数在使用非 default 分词器以及预处理器或后处理器表达式时有一些注意事项。
我们建议改用
hasAnyTokens 和 hasAllTokens。- 无。
hasTokenOrNull
首次引入版本:v20.1.0 与hasToken 类似,但如果标记格式不合法,则返回 NULL。
语法
haystack— 要搜索的字符串。必须为常量。Stringtoken— 要搜索的标记。const String
1;否则返回 0。如果 token 格式不合法,则返回 NULL。Nullable(UInt8)
示例
使用示例
Query
Response
highlight
引入版本:v26.4.0 使用 HTML 标签包裹文本字符串中搜索词的匹配项,从而将其高亮显示。 该函数执行 ASCII 不区分大小写匹配。如果多个搜索词在文本中重叠或彼此相邻,则匹配区域会合并为一个高亮 span。 语法haystack— 要搜索的文本。String或FixedStringneedles— 要高亮显示的搜索词数组。const Array(String)open_tag— 在每个匹配项前插入的起始标签。默认值:<em>。const Stringclose_tag— 在每个匹配项后插入的结束标签。默认值:</em>。const String
String
示例
基本高亮
Query
Response
Query
Response
ilike
引入版本:v20.6.0 与like 类似,但以不区分大小写的方式进行搜索。支持可选的 ESCAPE 子句 (参见 like) 。
语法
haystack— 执行搜索的字符串。String或FixedStringpattern— 用于匹配的 LIKE 模式。Stringescape_character— 可选的单字符字符串,用作转义字符以替代\。默认值:\。String
1,否则返回 0。UInt8
示例
使用示例
Query
Response
like
引入版本:v1.1.0 返回字符串haystack 是否匹配 LIKE 表达式 pattern。
LIKE 表达式可以包含普通字符以及以下元符号:
%表示任意数量的任意字符 (包括零个字符) 。_表示任意单个字符。\用于转义字面量%、_和\。
_ 可以匹配 Unicode 码点 ¥,该字符在 UTF-8 中用两个字节表示。
如果 haystack 或 LIKE 表达式不是有效的 UTF-8,则其行为未定义。
不会自动执行 Unicode 规范化;你可以使用 normalizeUTF8* 函数来完成此操作。
要匹配字面量 %、_ 和 \ (它们是 LIKE 元字符) ,请在它们前面加上反斜杠:\%、\_ 和 \\。
如果反斜杠后面的字符不是 %、_ 或 \,则反斜杠会失去其特殊含义 (即按字面量解释) 。
ClickHouse 要求字符串中的反斜杠也需要转义,因此实际需要写成
\\%、\\_ 和 \\\\。%needle% 的 LIKE 表达式,该函数的速度与 position 函数一样快。
所有其他 LIKE 表达式在内部都会转换为正则表达式,并以与 match 函数相近的性能执行。
ESCAPE 子句
可选的ESCAPE 子句用于指定自定义转义字符 (必须是单个 ASCII 字符) 。
提供后,自定义转义字符会替代默认的反斜杠,用于转义 % 和 _ 元字符。
转义字符可以转义三种内容:% (字面量百分号) 、_ (字面量下划线) 以及其自身 (字面量转义字符) 。
使用自定义转义字符时,反斜杠不再具有特殊含义,而是按字面量字符处理。
语法
haystack— 要在其中执行搜索的 String。String或FixedStringpattern— 要匹配的LIKE模式。可包含%(匹配任意数量的字符) 、_(匹配单个字符) 以及用于转义的\。Stringescape_character— 可选的单字符字符串,用作\的替代转义字符。默认值:\。String
LIKE 模式匹配,则返回 1;否则返回 0。UInt8
示例
用法示例
Query
Response
Query
Response
Query
Response
Query
Response
locate
引入版本:v18.16.0 与position 类似,但参数 haystack 和 locate 的顺序互换了。
此函数的行为取决于 ClickHouse 的版本:
- 在 < v24.3 的版本中,
locate是函数position的别名,接受参数(haystack, needle[, start_pos])。 - 在 >= 24.3 的版本中,
locate是一个独立函数 (为了更好地兼容 MySQL) ,接受参数(needle, haystack[, start_pos])。 可以通过设置function_locate_has_mysql_compatible_argument_order = false恢复之前的行为。
needle— 要搜索的子串。Stringhaystack— 要在其中进行搜索的字符串。String或Enumstart_pos— 可选。在haystack中开始搜索的位置 (从 1 开始计数) 。UInt
0。UInt64
示例
基本用法
Query
Response
match
引入版本:v1.1.0 检查给定字符串是否与指定的 正则表达式 模式 匹配。 此函数使用 RE2 正则表达式 库。支持的语法请参阅 re2。 匹配基于 UTF-8 假设进行,例如¥ 在内部占用两个字节,但在匹配时会被视为单个码点。
正则表达式 不能包含 NULL 字节。
如果 haystack 或 模式 不是有效的 UTF-8,则其行为未定义。
与 re2 的默认行为不同,. 会匹配换行符。要禁用此行为,请在 模式 前添加 (?-s)。
模式 不会自动加上锚点。若要匹配整个字符串,请自行使用 ^ 和 $ 对 模式 加锚。
如果你只是想搜索子字符串,可以改用函数 like 或 position,它们的速度比此函数快得多。
可选的运算符语法:haystack REGEXP pattern 或 haystack ~ pattern (PostgreSQL 风格) 。
语法
REGEXP_MATCHES
参数
返回值
如果匹配该模式,则返回 1,否则返回 0。UInt8
示例
基本模式匹配
Query
Response
Query
Response
Query
Response
matchCaseInsensitive
引入版本:v26.8.0 与match 类似,但进行不区分大小写的匹配。
此函数使用 RE2 正则表达式 库。支持的语法请参阅 re2。
可选的运算符语法:haystack ~* pattern (PostgreSQL 风格) 。
语法
1,否则返回 0。UInt8
示例
使用示例
Query
Response
multiFuzzyMatchAllIndices
引入版本:v20.1.0 与multiFuzzyMatchAny 类似,但会返回在固定编辑距离内与 haystack 匹配的所有索引组成的数组,顺序不限。
语法
haystack— 执行搜索的 String。Stringdistance— 模糊匹配允许的最大编辑距离。UInt8pattern— 要匹配的模式数组。Array(String)
Array(UInt64)
示例
使用示例
Query
Response
multiFuzzyMatchAny
引入版本:v20.1.0 与multiMatchAny 类似,但如果任意模式在固定的编辑距离内匹配 haystack,则返回 1。
此函数依赖 hyperscan 库的 Experimental 功能,在某些边缘情况下可能较慢。
其性能取决于编辑距离的取值和所使用的模式,但与非模糊变体相比,开销始终更高。
由于 hyperscan 的限制,
multiFuzzyMatch*() 函数家族不支持 UTF-8 正则表达式 (会将其视为字节序列) 。haystack— 执行搜索的 String。Stringdistance— 模糊匹配 的最大编辑距离。UInt8pattern— 可选。用于匹配的模式数组。Array(String)
1;否则返回 0。UInt8
示例
使用示例
Query
Response
multiFuzzyMatchAnyIndex
引入于:v20.1.0 与multiFuzzyMatchAny 类似,但会返回在固定编辑距离内与 haystack 匹配的任意一个索引。
语法
haystack— 执行搜索的字符串。Stringdistance— 模糊匹配允许的最大编辑距离。UInt8pattern— 用于匹配的模式数组。Array(String)
0。UInt64
示例
使用示例
Query
Response
multiMatchAllIndices
引入版本:v20.1.0 与multiMatchAny 类似,但返回按任意顺序与 haystack 匹配的所有索引组成的数组。
语法
Array(UInt64)
示例
使用示例
Query
Response
multiMatchAny
引入版本:v20.1.0 检查多个正则表达式 模式 中是否至少有一个与 haystack 匹配。 如果你只想在一个字符串中搜索多个子字符串,可以改用函数multiSearchAny——它的速度比此函数快得多。
语法
haystack— 在其中搜索模式的 String。Stringpattern1[, pattern2, ...]— 包含一个或多个正则表达式模式的数组。Array(String)
1,否则返回 0。UInt8
示例
多个模式匹配
Query
Response
Query
Response
multiMatchAnyIndex
引入版本:v20.1.0 与multiMatchAny 类似,但会返回任意一个与 haystack 匹配的索引。
语法
haystack— 执行搜索的字符串。Stringpattern— 用于匹配的正则表达式。Array(String)
UInt64
示例
使用示例
Query
Response
multiSearchAllPositions
Introduced in: v20.1.0 与position 类似,但它返回一个位置数组,表示 haystack 字符串中多个 needle 子字符串的位置 (以字节为单位,从 1 开始计数) 。
所有 multiSearch*() 函数最多仅支持 2^8 个 needle。
Syntax
haystack— 执行搜索的字符串。Stringneedle1[, needle2, ...]— 由一个或多个待搜索子字符串组成的数组。Array(String)
0。Array(UInt64)
示例
多个 needle 搜索
Query
Response
multiSearchAllPositionsCaseInsensitive
引入版本:v20.1.0 与multiSearchAllPositions 类似,但不区分大小写。
语法
haystack— 要在其中执行搜索的 String。Stringneedle1[, needle2, ...]— 由一个或多个待搜索子字符串组成的数组。Array(String)
0。Array(UInt64)
示例
不区分大小写的多重搜索
Query
Response
multiSearchAllPositionsCaseInsensitiveUTF8
引入版本:v20.1.0 与multiSearchAllPositionsUTF8 类似,但不区分大小写。
语法
haystack— 执行搜索的 UTF-8 编码字符串。Stringneedle— 要搜索的 UTF-8 编码子字符串。Array(String)
Array
示例
不区分大小写的 UTF-8 搜索
Query
Response
multiSearchAllPositionsUTF8
引入版本:v20.1.0 与multiSearchAllPositions 类似,但假定 haystack 和 needle 子串均为 UTF-8 编码的字符串。
语法
haystack— 要在其中执行搜索的 UTF-8 编码字符串。Stringneedle1[, needle2, ...]— 要搜索的 UTF-8 编码子字符串数组。Array(String)
0。Array
示例
UTF-8 多重搜索
Query
Response
multiSearchAny
引入版本:v20.1.0 检查多个 needle 字符串中是否至少有一个与 haystack 字符串匹配。 函数multiSearchAnyCaseInsensitive、multiSearchAnyUTF8 和 multiSearchAnyCaseInsensitiveUTF8 提供了此函数的不区分大小写和/或 UTF-8 变体。
语法
haystack— 在其中执行搜索的 String。Stringneedle1[, needle2, ...]— 要查找的子字符串数组。Array(String)
1;否则返回 0。UInt8
示例
任意匹配查找
Query
Response
multiSearchAnyCaseInsensitive
引入版本:v20.1.0 与 multiSearchAny 类似,但不区分大小写。 语法haystack— 在其中执行搜索的 String。Stringneedle— 要搜索的子字符串。Array(String)
1;否则返回 0。UInt8
示例
不区分大小写的搜索
Query
Response
multiSearchAnyCaseInsensitiveUTF8
首次引入于:v20.1.0 与 multiSearchAnyUTF8 类似,但不区分大小写。 语法haystack— 在其中执行搜索的 UTF-8 字符串。Stringneedle— 待搜索的 UTF-8 子字符串。Array(String)
1;否则返回 0。UInt8
示例
给定 UTF-8 字符串 ‘Здравствуйте’,检查是否包含字符 ‘з’ (小写)
Query
Response
multiSearchAnyUTF8
引入版本:v20.1.0 与 multiSearchAny 类似,但假定haystack 和 needle 子串都是 UTF-8 编码的字符串。
语法
haystack— 执行搜索的 UTF-8 字符串。Stringneedle— 要搜索的 UTF-8 子字符串。Array(String)
1;否则返回 0。UInt8
示例
给定 UTF-8 字符串 ‘你好,世界’ (‘Hello, world’) ,检查该字符串中是否包含字符 你 或 界
Query
Response
multiSearchFirstIndex
引入版本:v20.1.0 在 haystack 字符串中搜索多个 needle 字符串 (区分大小写) ,并返回找到的第一个 needle 的从 1 开始的索引。 语法haystack— 要在其中搜索的字符串。Stringneedles— 要查找的字符串数组。Array(String)
UInt64
示例
用法示例
Query
Response
Query
Response
Query
Response
multiSearchFirstIndexCaseInsensitive
引入版本:v20.1.0 返回字符串haystack 中最左侧匹配到的 needle_i 的索引 i (从 1 开始) ,否则返回 0。
不区分大小写。
语法
haystack— 执行搜索的 String。Stringneedle— 要搜索的子字符串。Array(String)
0。UInt8
示例
使用示例
Query
Response
multiSearchFirstIndexCaseInsensitiveUTF8
引入版本:v20.1.0 在支持 UTF-8 编码的情况下,以不区分大小写的方式在 haystack 字符串中搜索多个 needle 字符串,并返回第一个匹配到的 needle 的从 1 开始的索引。 语法haystack— 要搜索的字符串。Stringneedles— 要查找的字符串数组。Array(String)
UInt64
示例
用法示例
Query
Response
Query
Response
Query
Response
multiSearchFirstIndexUTF8
引入版本:v20.1.0 返回字符串haystack 中最靠左匹配到的 needle_i 的索引 i (从 1 开始) ,否则返回 0。
假定 haystack 和 needle 是采用 UTF-8 编码的字符串。
语法
haystack— 在其中进行搜索的 UTF-8 字符串。Stringneedle— 要搜索的 UTF-8 子字符串数组。Array(String)
needle 的索引 (从 1 开始计数) 。如果没有匹配,则返回 0。UInt8
示例
使用示例
Query
Response
multiSearchFirstPosition
引入版本:v20.1.0 与position 类似,但返回 haystack 字符串中与多个 needle 字符串里任意一个匹配的最左偏移量。
函数 multiSearchFirstPositionCaseInsensitive、multiSearchFirstPositionUTF8 和 multiSearchFirstPositionCaseInsensitiveUTF8 提供了此函数的不区分大小写和/或 UTF-8 变体。
语法
haystack— 执行搜索的 String。Stringneedle1[, needle2, ...]— 由一个或多个待搜索子字符串组成的数组。Array(String)
haystack 字符串中与多个 needle 字符串中的任意一个匹配的最左侧偏移量;如果没有匹配,则返回 0。UInt64
示例
搜索首个位置
Query
Response
multiSearchFirstPositionCaseInsensitive
引入版本:v20.1.0 与 multiSearchFirstPosition 类似,但不区分大小写。 语法haystack— 执行搜索的字符串。Stringneedle— 要搜索的子字符串数组。Array(String)
haystack 字符串中与多个 needle 字符串中的任意一个匹配的最左侧偏移量。如果没有匹配,则返回 0。UInt64
示例
大小写不敏感的第一个位置
Query
Response
multiSearchFirstPositionCaseInsensitiveUTF8
引入版本:v20.1.0 与 multiSearchFirstPosition 类似,但假定haystack 和 needle 均为 UTF-8 字符串,且不区分大小写。
语法
haystack— 执行搜索的 UTF-8 字符串。Stringneedle— 要搜索的 UTF-8 子字符串数组。Array(String)
haystack 字符串中与多个 needle 字符串中的任意一个匹配的最左侧偏移量,忽略大小写。如果没有匹配,则返回 0。UInt64
示例
查找 UTF-8 字符串 ‘Здравствуй, мир’ (‘Hello, world’) 中与给定 needle 中任意一个匹配的最左侧偏移量
Query
Response
multiSearchFirstPositionUTF8
引入版本:v20.1.0 与 multiSearchFirstPosition 类似,但假设haystack 和 needle 都是 UTF-8 字符串。
语法
haystack— 执行搜索的 UTF-8 字符串。Stringneedle— 要搜索的 UTF-8 子字符串数组。Array(String)
haystack 字符串中与多个 needle 字符串中任意一个匹配的最左侧偏移量。如果没有匹配,则返回 0。UInt64
示例
查找 UTF-8 字符串 ‘Здравствуй, мир’ (‘Hello, world’) 中与给定任意一个 needle 匹配的最左侧偏移量
Query
Response
ngramDistance
引入版本:v20.1.0 计算两个字符串之间的 4-gram 距离。 为此,它会统计两个 4-gram 多重集合之间的对称差,并用它们的基数之和对结果进行归一化。 返回值越小,字符串越相似。 如需进行不区分大小写的搜索和/或使用 UTF8 格式,请使用函数ngramDistanceCaseInsensitive、ngramDistanceUTF8、ngramDistanceCaseInsensitiveUTF8。
语法
0 和 1 之间的 Float32 数值。返回值越小,字符串越相似。Float32
示例
计算 4-gram 距离
Query
Response
ngramDistanceCaseInsensitive
引入版本:v20.1.0 提供ngramDistance 的不区分大小写 Variant。
计算两个字符串之间的 4-gram 距离,忽略大小写。
返回值越小,字符串越相似。
语法
0 和 1 之间的 Float32 数值。Float32
示例
不区分大小写的 4-gram 距离
Query
Response
ngramDistanceCaseInsensitiveUTF8
引入版本:v20.1.0 提供ngramDistance 的不区分大小写 UTF-8 Variant。
假定 needle 和 haystack 字符串均为 UTF-8 编码,并忽略大小写。
计算两个 UTF-8 字符串之间不区分大小写的 3-gram 距离。
返回值越小,字符串越相似。
语法
0 和 1 之间的 Float32 数值。Float32
示例
不区分大小写的 UTF-8 3-gram 距离
Query
Response
ngramDistanceUTF8
引入版本:v20.1.0 提供ngramDistance 的 UTF-8 Variant。
假定 needle 和 haystack 字符串均为 UTF-8 编码。
计算两个 UTF-8 字符串之间的 3-gram 距离。
返回值越小,字符串越相似。
语法
0 到 1 之间的 Float32 数值。Float32
示例
UTF-8 3-gram 距离
Query
Response
ngramSearch
引入版本:v20.1.0 检查两个字符串之间的 4-gram 距离是否小于或等于给定的阈值。 如需进行不区分大小写的搜索和/或使用 UTF8 格式,请使用函数ngramSearchCaseInsensitive、ngramSearchUTF8、ngramSearchCaseInsensitiveUTF8。
语法
1.0) ,则返回 1;否则返回 0。UInt8
示例
使用 4-gram 进行搜索
Query
Response
ngramSearchCaseInsensitive
引入版本:v20.1.0 提供ngramSearch 的不区分大小写 Variant。
计算 needle 字符串与 haystack 字符串之间的非对称差,即用 needle 中的 n-gram 数量减去共有的 n-gram 数量,再按 needle 的 n-gram 数量进行归一化。
检查两个字符串之间的 4-gram 距离是否小于或等于给定的阈值,并忽略大小写。
语法
1.0) ,则返回 1;否则返回 0。UInt8
示例
使用 4-gram 的不区分大小写搜索
Query
Response
ngramSearchCaseInsensitiveUTF8
引入版本:v20.1.0 提供ngramSearch 的不区分大小写 UTF-8 Variant。
假定 haystack 和 needle 为 UTF-8 字符串,并且不区分大小写。
检查两个 UTF-8 字符串之间的 3-gram 距离是否小于或等于给定阈值,且不区分大小写。
语法
1.0) ,则返回 1;否则返回 0。UInt8
示例
使用 3-gram 的不区分大小写 UTF-8 搜索
Query
Response
ngramSearchUTF8
引入版本:v20.1.0 提供ngramSearch 的 UTF-8 Variant。
假定 haystack 和 needle 为 UTF-8 字符串。
检查两个 UTF-8 字符串之间的 3-gram 距离是否小于或等于给定阈值。
语法
1.0) ,则返回 1;否则返回 0。UInt8
示例
使用 3-gram 进行 UTF-8 搜索
Query
Response
notILike
引入版本:v20.6.0 检查字符串是否不匹配某个模式,且不区分大小写。该模式可包含用于 SQL LIKE 匹配的特殊字符% 和 _。支持可选的 ESCAPE 子句 (参见 like) 。
语法
haystack— 待搜索的输入字符串。String或FixedStringpattern— 要匹配的 SQL LIKE 模式。%匹配任意数量的字符 (包括零个) ,_恰好匹配一个字符。Stringescape_character— 可选的单字符字符串,用作转义字符来替代\。默认值:\。String
1,否则返回 0。UInt8
示例
用法示例
Query
Response
notLike
Introduced in:v1.1.0 与like 类似,但会返回相反的结果。支持可选的 ESCAPE 子句 (参见 like) 。
语法
haystack— 要在其中执行搜索的字符串。String或FixedStringpattern— 用于匹配的 LIKE 模式。Stringescape_character— 可选的单字符字符串,用作转义字符,以替代\。默认值:\。String
LIKE 模式不匹配,则返回 1;否则返回 0。UInt8
示例
使用示例
Query
Response
Query
Response
notMatch
引入版本:v26.8.0 与match 类似,但会对结果取反:检查字符串是否不匹配正则表达式模式。
此函数使用 RE2 正则表达式 库。支持的语法请参阅 re2。
可选的运算符语法:haystack !~ pattern (PostgreSQL 风格) 。
语法
0,否则返回 1。UInt8
示例
使用示例
Query
Response
notMatchCaseInsensitive
引入版本:v26.8.0 与matchCaseInsensitive 类似,但会对结果取反:检查字符串是否不与正则表达式模式进行不区分大小写的匹配。
此函数使用 RE2 正则表达式库。支持的语法请参阅 re2。
可选的运算符语法:haystack !~* pattern (PostgreSQL 风格) 。
语法
0,否则返回 1。UInt8
示例
使用示例
Query
Response
position
引入版本:v1.1.0 返回子串needle 在字符串 haystack 中的位置 (以字节为单位,从 1 开始计数) 。
如果子串 needle 为空,则适用以下规则:
- 如果未指定
start_pos:返回1 - 如果
start_pos = 0:返回1 - 如果
start_pos >= 1且start_pos <= length(haystack) + 1:返回start_pos - 否则:返回
0
locate、positionCaseInsensitive、positionUTF8 和 positionCaseInsensitiveUTF8。
语法
haystack— 执行搜索的字符串。String或枚举needle— 要搜索的子串。Stringstart_pos—haystack中开始搜索的位置 (从 1 开始计数) 。可选。UInt
0。UInt64
示例
基本用法
Query
Response
Query
Response
Query
Response
Query
Response
positionCaseInsensitive
引入版本:v1.1.0 与position 类似,但不区分大小写。
语法
instr
参数
haystack— 执行搜索的字符串。String或枚举needle— 要搜索的子串。Stringstart_pos— 可选。haystack中开始搜索的位置 (从 1 开始计数) 。UInt*
0。UInt64
示例
不区分大小写的搜索
Query
Response
positionCaseInsensitiveUTF8
引入版本:v1.1.0 与positionUTF8 类似,但按不区分大小写的方式搜索。
语法
haystack— 执行搜索的字符串。String或枚举needle— 要搜索的子串。Stringstart_pos— 可选。haystack中开始搜索的位置 (从 1 开始) 。UInt*
0。UInt64
示例
不区分大小写的 UTF-8 搜索
Query
Response
positionUTF8
引入版本:v1.1.0 与position 类似,但假定 haystack 和 needle 为 UTF-8 编码的字符串。
语法
haystack— 执行搜索的字符串。String或枚举needle— 要搜索的子串。Stringstart_pos— 可选。haystack中开始搜索的位置 (从 1 开始计数) 。UInt*
0。UInt64
示例
按 UTF-8 字符计数
Query
Response