字符串操作函数
本文主要涉及 ClickHouse 中用于字符串操作的函数功能和语法,在字符串中搜索与替换可参考:ClickHouse 字符串搜索函数、ClickHouse 字符串替换函数 。
1. empty
检查输入字符串是否为空。如果字符串至少包含一个字节(即使是空格或空字节),则认为字符串非空。该函数也适用于数组和 UUID。
语法:
参数:
-
x
— 输入值。类型为字符串。
返回值:
-
如果是空字符串,返回
1
;否则返回0
。类型为UInt8
。
示例:
SELECT empty('');
结果:
┌─empty('')─┐
│ 1 │
└───────────┘
2. notEmpty
检查输入字符串是否非空。如果字符串至少包含一个字节(即使是空格或空字节),则认为字符串非空。该函数也适用于数组和 UUID。
语法:
参数:
-
x
— 输入值。类型为字符串。
返回值:
-
如果是非空字符串,返回
1
;否则返回0
。类型为UInt8
。
示例:
SELECT notEmpty('text');
结果:
┌─notEmpty('text')─┐
│ 1 │
└──────────────────┘
3. length
返回字符串的长度(以字节为单位),而不是字符或 Unicode 码点的数量。该函数也适用于数组。
别名: OCTET_LENGTH
语法:
参数:
-
s
— 输入字符串或数组。类型为字符串或数组。
返回值:
-
字符串或数组
s
的长度(以字节为单位)。类型为UInt64
。
示例:
SELECT length('Hello, world!');
结果:
┌─length('Hello, world!')─┐
│ 13 │
└─────────────────────────┘
4. lengthUTF8
返回字符串的长度(以 Unicode 码点为单位),而不是字节或字符的数量。假设字符串包含有效的 UTF-8 编码文本。如果违反此假设,不会抛出异常,结果未定义。
别名: CHAR_LENGTH
、CHARACTER_LENGTH
语法:
参数:
-
s
— 包含有效 UTF-8 编码文本的字符串。类型为字符串。
返回值:
-
字符串
s
的长度(以 Unicode 码点为单位)。类型为UInt64
。
示例:
SELECT lengthUTF8('Здравствуй, мир!');
结果:
┌─lengthUTF8('Здравствуй, мир!')─┐
│ 16 │
└────────────────────────────────┘
5. left
返回字符串 s
的子字符串,从左侧开始指定的 offset
。
语法:
参数:
-
s
— 要计算子字符串的字符串。类型为字符串或 FixedString。 -
offset
— 偏移量的字节数。类型为UInt*
。
返回值:
-
如果
offset
为正数:从字符串左侧开始的offset
字节的子字符串。 -
如果
offset
为负数:从字符串左侧开始的length(s) - |offset|
字节的子字符串。 -
如果长度为 0,则返回空字符串。
示例:
SELECT left('Hello', 3);
结果:
Hel
6. leftUTF8
返回 UTF-8 编码字符串 s
的子字符串,从左侧开始指定的 offset
。
语法:
参数:
-
s
— 要计算子字符串的 UTF-8 编码字符串。类型为字符串或 FixedString。 -
offset
— 偏移量的字节数。类型为UInt*
。
返回值:
-
如果
offset
为正数:从字符串左侧开始的offset
字节的子字符串。 -
如果
offset
为负数:从字符串左侧开始的length(s) - |offset|
字节的子字符串。 -
如果长度为 0,则返回空字符串。
示例:
SELECT leftUTF8('Привет', 4);
结果:
Прив
结果:
7. leftPad
从左侧用空格或指定的字符串(如有需要,可重复多次)填充字符串,直到结果字符串达到指定的 length
。
语法:
leftPad(string, length[, pad_string])
别名: LPAD
参数:
-
string
— 要填充的输入字符串。类型为字符串。 -
length
— 结果字符串的长度。类型为UInt
或Int
。如果该值小于输入字符串的长度,则输入字符串将被缩短为length
字符。 -
pad_string
— 用于填充输入字符串的字符串。类型为字符串。可选参数。如果未指定,则输入字符串将用空格填充。
返回值:
-
给定长度的左填充字符串。类型为字符串。
示例:
SELECT leftPad('abc', 7, '*'), leftPad('def', 7);
结果:
┌─leftPad('abc', 7, '*')─┬─leftPad('def', 7)─┐
│ ****abc │ def │
└────────────────────────┴───────────────────┘
8. leftPadUTF8
从左侧用空格或指定的字符串(如有需要,可重复多次)填充字符串,直到结果字符串达到指定的 length
。与 leftPad
不同,leftPadUTF8
以码点为单位测量字符串长度,而不是以字节为单位。
语法:
leftPadUTF8(string, length[, pad_string])
参数:
-
string
— 要填充的输入字符串。类型为字符串。 -
length
— 结果字符串的长度。类型为UInt
或Int
。如果该值小于输入字符串的长度,则输入字符串将被缩短为length
字符。 -
pad_string
— 用于填充输入字符串的字符串。类型为字符串。可选参数。如果未指定,则输入字符串将用空格填充。
返回值:
-
给定长度的左填充字符串。类型为字符串。
示例:
SELECT leftPadUTF8('абвг', 7, '*'), leftPadUTF8('дежз', 7);
结果:
┌─leftPadUTF8('абвг', 7, '*')─┬─leftPadUTF8('дежз', 7)─┐
│ ***абвг │ дежз │
└─────────────────────────────┴────────────────────────┘
9. right
返回字符串 s
的子字符串,从右侧开始指定的 offset
。
语法:
参数:
-
s
— 要计算子字符串的字符串。类型为字符串或 FixedString。 -
offset
— 偏移量的字节数。类型为UInt*
。
返回值:
-
如果
offset
为正数:从字符串右侧开始的offset
字节的子字符串。 -
如果
offset
为负数:从字符串右侧开始的length(s) - |offset|
字节的子字符串。 -
如果长度为 0,则返回空字符串。
示例:
SELECT right('Hello', 3);
结果:
llo
结果:
10. rightUTF8
返回 UTF-8 编码字符串 s
的子字符串,从右侧开始指定的 offset
。
语法:
参数:
-
s
— 要计算子字符串的 UTF-8 编码字符串。类型为字符串或 FixedString。 -
offset
— 偏移量的字节数。类型为UInt*
。
返回值:
-
如果
offset
为正数:从字符串右侧开始的offset
字节的子字符串。 -
如果
offset
为负数:从字符串右侧开始的length(s) - |offset|
字节的子字符串。 -
如果长度为 0,则返回空字符串。
示例:
SELECT rightUTF8('Привет', 4);
结果:
ивет
结果:
11. rightPad
从右侧用空格或指定的字符串(如有需要,可重复多次)填充字符串,直到结果字符串达到指定的 length
。
语法:
rightPad(string, length[, pad_string])
别名: RPAD
参数:
-
string
— 要填充的输入字符串。类型为字符串。 -
length
— 结果字符串的长度。类型为UInt
或Int
。如果该值小于输入字符串的长度,则输入字符串将被缩短为length
字符。 -
pad_string
— 用于填充输入字符串的字符串。类型为字符串。可选参数。如果未指定,则输入字符串将用空格填充。
返回值:
-
给定长度的右填充字符串。类型为字符串。
示例:
SELECT rightPad('abc', 7, '*'), rightPad('abc', 7);
结果:
┌─rightPad('abc', 7, '*')─┬─rightPad('abc', 7)─┐
│ abc**** │ abc │
└─────────────────────────┴────────────────────┘
12. rightPadUTF8
从右侧用空格或指定的字符串(如有需要,可重复多次)填充字符串,直到结果字符串达到指定的 length
。与 rightPad
不同,rightPadUTF8
以码点为单位测量字符串长度,而不是以字节为单位。
语法:
rightPadUTF8(string, length[, pad_string])
参数:
-
string
— 要填充的输入字符串。类型为字符串。 -
length
— 结果字符串的长度。类型为UInt
或Int
。如果该值小于输入字符串的长度,则输入字符串将被缩短为length
字符。 -
pad_string
— 用于填充输入字符串的字符串。类型为字符串。可选参数。如果未指定,则输入字符串将用空格填充。
返回值:
-
给定长度的右填充字符串。类型为字符串。
示例:
SELECT rightPadUTF8('абвг', 7, '*'), rightPadUTF8('абвг', 7);
结果:
┌─rightPadUTF8('абвг', 7, '*')─┬─rightPadUTF8('абвг', 7)─┐
│ абвг*** │ абвг │
└──────────────────────────────┴─────────────────────────┘
13. lower
将字符串中的 ASCII 拉丁字符转换为小写。
语法:
别名: lcase
参数:
-
input
— 输入字符串。类型为字符串。
返回值:
-
转换为小写的字符串。类型为字符串。
示例:
SELECT lower('CLICKHOUSE');
结果:
┌─lower('CLICKHOUSE')─┐
│ clickhouse │
└─────────────────────┘
14. upper
将字符串中的 ASCII 拉丁字符转换为大写。
语法:
别名: ucase
参数:
-
input
— 输入字符串。类型为字符串。
返回值:
-
转换为大写的字符串。类型为字符串。
示例:
SELECT upper('clickhouse');
结果:
┌─upper('clickhouse')─┐
│ CLICKHOUSE │
└─────────────────────┘
15. lowerUTF8
将字符串转换为小写,假设字符串包含有效的 UTF-8 编码文本。如果违反此假设,