目录
1、replaceOne(haystack, pattern, replacement)
2、replaceAll(haystack, pattern, replacement), replace(haystack, pattern, replacement)
3、replaceRegexpOne(haystack, pattern, replacement)
4、replaceRegexpAll(haystack, pattern, replacement)
1、replaceOne(haystack, pattern, replacement)
说明:用’replacement’子串替换’haystack’中第一次出现的’pattern’子串(如果存在)。’pattern’和’replacement’必须是常量。
select replaceRegexpOne('Hello, ClickHouce','e',''); -- Hllo, ClickHouce
2、replaceAll(haystack, pattern, replacement), replace(haystack, pattern, replacement)
说明:用’replacement’子串替换’haystack’中出现的所有的’pattern’子串。
select replaceAll('Hello, ClickHouce','e',''),replace('Hello, ClickHouce','e','');-- Hllo, ClickHouc
3、replaceRegexpOne(haystack, pattern, replacement)
使用’pattern’正则表达式的替换。 ‘pattern’可以是任意一个有效的re2正则表达式。
如果存在与’pattern’正则表达式匹配的匹配项,仅替换第一个匹配项。
模式pattern可以指定为‘replacement’。此模式可以包含替代\0-\9。
替代\0包含了整个正则表达式。替代\1-\9对应于子模式编号。要在模板中使用反斜杠\,请使用\将其转义。
另外还请记住,字符串字面值(literal)需要额外的转义。
-- 例1.将日期转换为美国格式:
select
'2021-12-21' as EventDate ,
replaceRegexpOne(toString(EventDate), '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res;
-- 例2.复制字符串五次:
select replaceRegexpOne('Hello, ClickHouce;', '.*', '\\0\\0\\0\\0\\0') AS res;
4、replaceRegexpAll(haystack, pattern, replacement)
说明:与replaceRegexpOne相同,但会替换所有出现的匹配项。例如:
select replaceRegexpAll('Hello, ClickHouce', '.', '\\0\\0') AS res;
注:对于空子字符串,正则表达式只会进行一次替换。
select replaceRegexpAll('Hello, ClickHouce', '^', 'here: ') AS res;
5、regexpQuoteMeta(s)
说明:该函数用于在字符串中的某些预定义字符之前添加反斜杠。
预定义字符:\0, \\, |, (, ), ^, $, ., [, ], ?, *, +, {, :, -。
这个实现与re2::RE2::QuoteMeta略有不同。它以\0 转义零字节,而不是\x00,并且只转义必需的字符。
select regexpQuoteMeta('$Hello, ClickHouce $[]');
参考:https://clickhouse.tech/docs/en/sql-reference/functions/string-replace-functions/