
字符串替换函数
一般字符串操作函数和用于字符串搜索的函数,可参考: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 对应于整个匹配。
如果需要在 pattern 或 replacement 字符串中使用字面量 \,请使用 \ 进行转义。同时请注意,字符串字面量需要额外的转义。
语法:
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
根据from和to字符串定义的字符一对一映射关系,替换字符串s中的字符。from和to必须是常量ASCII字符串。如果from和to的长度相等,那么s中from的第一个字符会被替换为to的第一个字符,from的第二个字符会被替换为to的第二个字符,依此类推。如果from的字符数多于to,那么from中没有对应字符的多余字符在s中的所有出现都会被删除。s中的非ASCII字符不会被该函数修改。
语法
translate(s, from, to)
示例
SELECT translate('Hello, World!', 'delor', 'DELOR') AS res;
结果:
┌─res───────────┐
│ HELLO, WORLD! │
└───────────────┘
from和to参数长度不同:
SELECT translate('clickhouse', 'clickhouse', 'CLICK') AS res;
结果:
┌─res───┐
│ CLICK │
└───────┘
9. translateUTF8
与translate类似,但假设s、from和to是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 │
└──────────────────────────────────────────────┘
`
4万+

被折叠的 条评论
为什么被折叠?



