ClickHouse 字符串搜索函数

字符串搜索函数

本节中的所有函数默认进行区分大小写的搜索。通常会提供单独的函数变体以支持不区分大小写的搜索。

注意事项
  • 不区分大小写的搜索遵循英语的大小写规则。例如,英语中大写的 iI,而在土耳其语中是 İ,因此对于非英语语言,结果可能不符合预期。

  • 本节中的函数假设被搜索的字符串(称为 haystack)和搜索的子字符串(称为 needle)是单字节编码的文本。如果违反此假设,不会抛出异常,结果也是未定义的。对于 UTF-8 编码字符串的搜索,通常会提供单独的函数变体。同样,如果使用 UTF-8 函数变体而输入字符串不是 UTF-8 编码文本,也不会抛出异常,结果同样是未定义的。

  • 注意,不会自动进行 Unicode 标准化,但你可以使用 normalizeUTF8*() 函数来实现。


1. position

返回子字符串 needle 在字符串 haystack 中的位置(以字节为单位,从 1 开始)。

语法:

position(haystack, needle[, start_pos])

别名:

  • position(needle IN haystack)

参数:

  • haystack:被搜索的字符串。类型为字符串或枚举。

  • needle:要搜索的子字符串。类型为字符串。

  • start_pos:在 haystack 中开始搜索的位置(从 1 开始)。类型为无符号整数。可选参数。

返回值:

  • 如果找到子字符串,则返回其在 haystack 中的起始位置(以字节为单位,从 1 开始)。类型为 UInt64

  • 如果未找到子字符串,则返回 0

如果子字符串 needle 为空,则适用以下规则:

  • 如果未指定 start_pos,则返回 1

  • 如果 start_pos = 0,则返回 1

  • 如果 start_pos >= 1start_pos <= length(haystack) + 1,则返回 start_pos

  • 否则返回 0

这些规则同样适用于 locatepositionCaseInsensitivepositionUTF8positionCaseInsensitiveUTF8 函数。


2. locate

position 类似,但参数顺序相反(haystackneedle 互换)。

从 ClickHouse v24.3 开始,locate 成为一个独立函数(以更好地兼容 MySQL),接受参数 (needle, haystack[, start_pos])。如果需要恢复旧版本的行为,可以通过设置 function_locate_has_mysql_compatible_argument_order = false 来实现。

语法:

locate(needle, haystack[, start_pos])

3. positionCaseInsensitive

position 的不区分大小写版本。

示例:

SELECT positionCaseInsensitive('Hello, world!', 'hello');

结果:

1


4. positionUTF8

position 类似,但假设 haystack

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值