跳转到主要内容
常规字符串函数字符串搜索函数分别在其他页面中说明。
以下文档根据 system.functions 系统表自动生成。

format

Introduced in:v20.1.0 使用参数中列出的值 (字符串、整数等) 对 pattern 字符串进行格式化,类似于 Python 中的格式化方式。 模式字符串可以包含由花括号 {} 括起来的替换字段。 凡是不在花括号中的内容都会被视为字面文本,并原样复制到输出中。 字面花括号字符可以用两个花括号进行转义:{{}}。 字段名可以是数字 (从零开始) ,也可以为空 (此时会隐式分配按顺序递增的编号) 。 Syntax
format(pattern, s0[, s1, ...])
参数
  • pattern — 包含占位符的格式字符串。String
  • s0[, s1, ...] — 用于替换模式中占位符的一个或多个值。Any
返回值 返回格式化后的字符串。String 示例 编号占位符
Query
SELECT format('{1} {0} {1}', 'World', 'Hello')
Response
┌─format('{1} {0} {1}', 'World', 'Hello')─┐
│ Hello World Hello                       │
└─────────────────────────────────────────┘
隐式编号
Query
SELECT format('{} {}', 'Hello', 'World')
Response
┌─format('{} {}', 'Hello', 'World')─┐
│ Hello World                       │
└───────────────────────────────────┘

overlay

引入版本:v24.9.0 从基于 1 的位置 offset 开始,用另一个字符串 replace 替换字符串 input 的一部分。 语法
overlay(s, replace, offset[, length])
参数
  • s — 输入字符串。String
  • replace — 替换字符串。const String
  • offset — 整数类型 Int (从 1 开始计数) 。如果 offset 为负数,则从字符串 s 的末尾开始计数。Int
  • length — 可选。整数类型 Intlength 指定输入字符串 s 中要替换的片段长度。如果未指定 length,则从 s 中移除的字节数等于 replace 的长度;否则移除 length 个字节。Int
返回值 返回替换后的字符串。String 示例 基本替换
Query
SELECT overlay('My father is from Mexico.', 'mother', 4) AS res;
Response
┌─res──────────────────────┐
│ My mother is from Mexico.│
└──────────────────────────┘
按长度替换
Query
SELECT overlay('My father is from Mexico.', 'dad', 4, 6) AS res;
Response
┌─res───────────────────┐
│ My dad is from Mexico.│
└───────────────────────┘

overlayUTF8

引入版本:v24.9.0 从基于 1 的索引 offset 开始,将字符串 s 的一部分替换为另一个字符串 replace。 假定该字符串包含有效的 UTF-8 编码文本。 如果这一假定不成立,不会抛出异常,结果将是未定义的。 语法
overlayUTF8(s, replace, offset[, length])
参数
  • s — 输入字符串。String
  • replace — 替换字符串。const String
  • offset — 整数类型 Int (从 1 开始计数) 。如果 offset 为负数,则从输入字符串 s 的末尾开始计数。(U)Int*
  • length — 可选。指定输入字符串 s 中要替换的片段长度。如果未指定 length,则从 s 中移除的字符数等于 replace 的长度;否则移除 length 个字符。(U)Int*
返回值 返回替换后的字符串。String 示例 UTF-8 替换
Query
SELECT overlayUTF8('Mein Vater ist aus Österreich.', 'der Türkei', 20) AS res;
Response
┌─res───────────────────────────┐
│ Mein Vater ist aus der Türkei.│
└───────────────────────────────┘

printf

引入版本:v24.8.0 printf 函数使用参数中列出的值 (字符串、整数、浮点数等) 对给定字符串进行格式化,类似于 C++ 中的 printf 函数。 格式字符串可以包含以 % 字符开头的格式说明符。 凡是不包含在 % 及其后续格式说明符中的内容,都会被视为字面文本,并原样复制到输出中。 字面 % 字符可通过 %% 转义。 格式字符串既可以是常量,也可以是列表达式,因此每一行都可以使用不同的格式模式。 语法
printf(format[, sub1, sub2, ...])
参数
  • format — 包含 % 说明符的格式字符串。String
  • sub1, sub2, ... — 可选。用于替换到格式字符串中的零个或多个值。Any
返回值 返回格式化后的字符串。String 示例 C++ 风格的格式化
Query
SELECT printf('%%%s %s %d', 'Hello', 'World', 2024);
Response
┌─printf('%%%s %s %d', 'Hello', 'World', 2024)─┐
│ %Hello World 2024                            │
└──────────────────────────────────────────────┘

regexpQuoteMeta

引入版本:v20.1.0 在以下在正则表达式中具有特殊含义的字符前添加反斜杠:\0\\|()^$.[]?*+{:-。 此实现与 re2::RE2::QuoteMeta 略有不同。 它会将零字节转义为 \0,而不是 \x00,并且只转义必要的字符。 语法
regexpQuoteMeta(s)
参数
  • s — 输入字符串,包含需要为正则表达式转义的字符。String
返回值 返回一个对正则表达式特殊字符进行转义后的字符串。String 示例 转义正则表达式中的特殊字符
Query
SELECT regexpQuoteMeta('Hello. [World]? (Yes)*') AS res
Response
┌─res───────────────────────────┐
│ Hello\. \[World\]\? \(Yes\)\* │
└───────────────────────────────┘

replaceAll

引入版本:v1.1.0 haystack 中出现的所有子串 pattern 替换为 replacement 字符串。 语法
replaceAll(haystack, pattern, replacement)
别名: replace 参数
  • haystack — 要搜索的输入字符串。String
  • pattern — 要查找并替换的子串。const String
  • replacement — 用于替换 pattern 的字符串。const String
返回值 返回将 pattern 的所有匹配项都替换后的字符串。String 示例 替换所有匹配项
Query
SELECT replaceAll('Hello, Hello world', 'Hello', 'Hi') AS res;
Response
┌─res──────────┐
│ Hi, Hi world │
└──────────────┘

replaceOne

引入版本:v1.1.0 haystack 中首次出现的子串 pattern 替换为 replacement 字符串。 语法
replaceOne(haystack, pattern, replacement)
参数
  • haystack — 要搜索的输入字符串。String
  • pattern — 要查找并替换的子串。const String
  • replacement — 用于替换 pattern 的字符串。const String
返回值 返回一个将 pattern 首次出现替换后的字符串。String 示例 替换首次出现
Query
SELECT replaceOne('Hello, Hello world', 'Hello', 'Hi') AS res;
Response
┌─res─────────────┐
│ Hi, Hello world │
└─────────────────┘

replaceRegexpAll

引入版本:v1.1.0 replaceRegexpOne 类似,但会替换所有匹配该模式的内容。 但有一个例外:如果正则表达式匹配的是空子串,则替换最多只会执行一次。 语法
replaceRegexpAll(haystack, pattern, replacement)
别名: REGEXP_REPLACE 参数
  • haystack — 要搜索的输入字符串。String
  • pattern — 要查找的正则表达式模式。const String
  • replacement — 用于替换该模式的字符串,可包含替换。const String
返回值 返回一个将所有正则匹配项替换后的字符串。String 示例 将所有字符替换为其双倍形式
Query
SELECT replaceRegexpAll('Hello123', '.', '\\\\0\\\\0') AS res
Response
┌─res──────────────────┐
│ HHeelllloo112233     │
└──────────────────────┘
空子串替换示例
Query
SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res
Response
┌─res─────────────────┐
│ here: Hello, World! │
└─────────────────────┘

replaceRegexpOne

始于版本:v1.1.0 haystack 中与正则表达式 pattern (re2 语法) 匹配的第一个子串替换为 replacement 字符串。 replacement 可以包含替换 \0-\9。 其中,\1-\9 分别对应第 1 到第 9 个捕获组 (子匹配) ,\0 对应整个匹配。 如果要在 patternreplacement 字符串中使用字面的 \ 字符,请使用 \ 对其进行转义。 另请注意,字符串字面量还需要额外转义。 语法
replaceRegexpOne(haystack, pattern, replacement)
参数
  • haystack — 要搜索的输入字符串。String
  • pattern — 要查找的正则表达式模式。const String
  • replacement — 用于替换匹配模式的字符串,可包含替换。const String
返回值 返回将第一个正则匹配项替换后的字符串。String 示例 将 ISO 日期转换为美式格式
Query
SELECT DISTINCT
    EventDate,
    replaceRegexpOne(toString(EventDate), '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res
FROM test.hits
LIMIT 7
FORMAT TabSeparated
Response
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
将字符串复制十次
Query
SELECT replaceRegexpOne('Hello, World!', '.*', '\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0') AS res
Response
┌─res────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World! │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

translate

引入版本:v22.7.0 按照 fromto 字符串定义的一对一字符映射,替换字符串 s 中的字符。 fromto 必须是常量 ASCII 字符串。 如果 fromto 的长度相同,则将 s 中出现的 from 的第一个字符替换为 to 的第一个字符,将 from 的第二个字符替换为 to 的第二个字符,依此类推。 如果 from 包含的字符多于 to,则 from 末尾那些在 to 中没有对应字符的字符在 s 中出现时都会被删除。 函数不会修改 s 中的非 ASCII 字符。 语法
translate(s, from, to)
参数
  • s — 待转换的输入字符串。String
  • from — 包含待替换字符的常量 ASCII 字符串。const String
  • to — 包含替换后字符的常量 ASCII 字符串。const String
返回值 返回应用字符转换后的字符串。String 示例 字符映射
Query
SELECT translate('Hello, World!', 'delor', 'DELOR') AS res
Response
┌─res───────────┐
│ HELLO, WORLD! │
└───────────────┘
长度不同
Query
SELECT translate('clickhouse', 'clickhouse', 'CLICK') AS res
Response
┌─res───┐
│ CLICK │
└───────┘

translateUTF8

引入版本:v22.7.0 translate 类似,但假设 sfromto 都是 UTF-8 编码的字符串。 语法
translateUTF8(s, from, to)
参数
  • s — 待转换的 UTF-8 输入字符串。String
  • from — 包含待替换字符的常量 UTF-8 字符串。const String
  • to — 包含替换字符的常量 UTF-8 字符串。const String
返回值 返回 String 数据类型的值。String 示例 UTF-8 字符转换
Query
SELECT translateUTF8('Münchener Straße', 'üß', 'us') AS res;
Response
┌─res──────────────┐
│ Munchener Strase │
└──────────────────┘
最后修改于 2026年6月10日