ClickHouse 字符串替换函数

部署运行你感兴趣的模型镜像

字符串替换函数

一般字符串操作函数和用于字符串搜索的函数,可参考:ClickHouse 字符串操作函数ClickHouse 字符串搜索函数


1. overlay

将字符串 input 中的一部分替换为另一个字符串 replace,从基于 1 的索引 offset 开始。

语法:

overlay(s, replace, offset[, length])

参数:

  • s:输入字符串。类型为字符串。

  • replace:用于替换的字符串。类型为字符串。

  • offset:整数类型(基于 1)。如果 offset 为负数,则从字符串 s 的末尾开始计算。

  • length:可选参数。整数类型。length 指定了输入字符串 s 中要被替换的片段的长度。如果未指定 length,则从 s 中移除的字节数等于 replace 的长度;否则移除 length 字节。

返回值:

  • 返回值为字符串类型。

示例:

SELECT overlay('My father is from Mexico.', 'mother', 4) AS res;

结果:

┌─res──────────────────────┐
│ My mother is from Mexico.│
└──────────────────────────┘

示例:

SELECT overlay('My father is from Mexico.', 'dad', 4, 6) AS res;

结果:

┌─res───────────────────┐
│ My dad is from Mexico.│
└───────────────────────┘

2. overlayUTF8

将字符串 input 中的一部分替换为另一个字符串 replace,从基于 1 的索引 offset 开始。

假设字符串包含有效的 UTF-8 编码文本。如果违反此假设,不会抛出异常,结果未定义。

语法:

overlayUTF8(s, replace, offset[, length])

参数:

  • s:输入字符串。类型为字符串。

  • replace:用于替换的字符串。类型为字符串。

  • offset:整数类型(基于 1)。如果 offset 为负数,则从输入字符串 s 的末尾开始计算。

  • length:可选参数。整数类型。length 指定了输入字符串 s 中要被替换的片段的长度。如果未指定 length,则从 s 中移除的字符数等于 replace 的长度;否则移除 length 个字符。

返回值:

  • 返回值为字符串类型。

示例:

SELECT overlay('Mein Vater ist aus Österreich.', 'der Türkei', 20) AS res;

结果:

┌─res───────────────────────────┐
│ Mein Vater ist aus der Türkei.│
└───────────────────────────────┘

3. replaceOne

将字符串 haystack 中的第一个子字符串 pattern 替换为字符串 replacement

语法:

replaceOne(haystack, pattern, replacement)

4. replaceAll

将字符串 haystack 中的所有子字符串 pattern 替换为字符串 replacement

语法:

replaceAll(haystack, pattern, replacement)

别名: replace


5. replaceRegexpOne

将字符串 haystack 中第一个匹配正则表达式 pattern(re2 语法)的子字符串替换为字符串 replacement

replacement 可以包含替换符号 \0-\9。替换符号 \1-\9 对应于第 1 到第 9 个捕获组(子匹配),替换符号 \0 对应于整个匹配。

如果需要在 patternreplacement 字符串中使用字面量 \,请使用 \ 进行转义。同时请注意,字符串字面量需要额外的转义。

语法:

replaceRegexpOne(haystack, pattern, replacement)

示例:

将 ISO 日期格式转换为美式格式:

SELECT DISTINCT
    EventDate,
    replaceRegexpOne(toString(EventDate), '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res
FROM test.hits
LIMIT 7
FORMAT TabSeparated

结果:

2014-03-17      03/17/2014
2014-03-18      03/18/2014
2014-03-19      03/19/2014
2014-03-20      03/20/2014
2014-03-21      03/21/2014
2014-03-22      03/22/2014
2014-03-23      03/23/2014

将字符串复制十次:

SELECT replaceRegexpOne('Hello, World!', '.*', '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0') AS res

结果:

┌─res────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World! │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

6. replaceRegexpAll

replaceRegexpOne 类似,但替换所有匹配的模式。

别名: REGEXP_REPLACE

示例:

SELECT replaceRegexpAll('Hello, World!', '.', '\\0\\0') AS res

结果:

┌─res────────────────────────┐
│ HHeelllloo,,  WWoorrlldd!! │
└────────────────────────────┘

如果正则表达式匹配的是空字符串,则替换不会超过一次,例如:

SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res

结果:

┌─res─────────────────┐
│ here: Hello, World! │
└─────────────────────┘

7. format

按照 Python 中类似的格式化方式,使用参数列表中的值(字符串、整数等)格式化 pattern 字符串。模式字符串可以包含由大括号 {} 包围的替换字段。不在大括号中的内容被视为普通文本,并原样复制到输出中。可以通过双大括号 { { '{ {' }}{ { '}}' }} 转义字面量大括号字符。字段名称可以是数字(从零开始)或为空(则它们被隐式地赋予单调递增的数字)。

语法:

format(pattern, s0, s1, ...)

示例:

SELECT format('{1} {0} {1}', 'World', 'Hello')

结果:

┌─format('{1} {0} {1}', 'World', 'Hello')─┐
│ Hello World Hello                       │
└─────────────────────────────────────────┘

使用隐式数字:

SELECT format('{} {}', 'Hello', 'World')

结果:

┌─format('{} {}', 'Hello', 'World')─┐
│ Hello World                       │
└───────────────────────────────────┘

8. translate

根据fromto字符串定义的字符一对一映射关系,替换字符串s中的字符。fromto必须是常量ASCII字符串。如果fromto的长度相等,那么sfrom的第一个字符会被替换为to的第一个字符,from的第二个字符会被替换为to的第二个字符,依此类推。如果from的字符数多于to,那么from中没有对应字符的多余字符在s中的所有出现都会被删除。s中的非ASCII字符不会被该函数修改。

语法

translate(s, from, to)

示例

SELECT translate('Hello, World!', 'delor', 'DELOR') AS res;

结果:

┌─res───────────┐
│ HELLO, WORLD! │
└───────────────┘

fromto参数长度不同:

SELECT translate('clickhouse', 'clickhouse', 'CLICK') AS res;

结果:

┌─res───┐
│ CLICK │
└───────┘

9. translateUTF8

translate类似,但假设sfromto是UTF-8编码的字符串。

语法

translateUTF8(s, from, to)

参数

  • s:字符串类型,String

  • from:字符串类型,String

  • to:字符串类型,String

返回值

返回一个String数据类型的值。

示例

SELECT translateUTF8('Münchener Straße', 'üß', 'us') AS res;

结果:

┌─res──────────────┐
│ Munchener Strase │
└──────────────────┘

10. printf

printf函数类似于C++中的printf函数,它根据参数中列出的值(字符串、整数、浮点数等)格式化给定的字符串。格式字符串可以包含以%字符开头的格式说明符。任何不在%和后续格式说明符之间的内容都被视为普通文本,并原样复制到输出中。普通%字符可以通过%%转义。

语法

printf(format, arg1, arg2, ...)

示例

SELECT printf('%%%s %s %d', 'Hello', 'World', 2024);

结果:

┌─printf('%%%s %s %d', 'Hello', 'World', 2024)─┐
│ %Hello World 2024                            │
└──────────────────────────────────────────────┘

`

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值