ClickHouse/docs/zh/query_language/functions/string_functions.md
2019-06-06 15:02:18 +08:00

168 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 字符串函数
## empty {#string_functions-empty}
对于空字符串返回1对于非空字符串返回0。
结果类型是UInt8。
如果字符串包含至少一个字节,则该字符串被视为非空字符串,即使这是一个空格或空字符。
该函数也适用于数组。
## notEmpty
对于空字符串返回0对于非空字符串返回1。
结果类型是UInt8。
该函数也适用于数组。
## length
返回字符串的字节长度。
结果类型是UInt64。
该函数也适用于数组。
## lengthUTF8
假定字符串以UTF-8编码组成的文本返回此字符串的Unicode字符长度。如果传入的字符串不是UTF-8编码则函数可能返回一个预期外的值不会抛出异常
结果类型是UInt64。
## char_length, CHAR_LENGTH
假定字符串以UTF-8编码组成的文本返回此字符串的Unicode字符长度。如果传入的字符串不是UTF-8编码则函数可能返回一个预期外的值不会抛出异常
结果类型是UInt64。
## character_length, CHARACTER_LENGTH
假定字符串以UTF-8编码组成的文本返回此字符串的Unicode字符长度。如果传入的字符串不是UTF-8编码则函数可能返回一个预期外的值不会抛出异常
结果类型是UInt64。
## lower, lcase
将字符串中的ASCII转换为小写。
## upper, ucase
将字符串中的ASCII转换为大写。
## lowerUTF8
将字符串转换为小写函数假设字符串是以UTF-8编码文本的字符集。
同时函数不检测语言。因此对土耳其人来说,结果可能不完全正确。
如果UTF-8字节序列的长度对于代码点的大写和小写不同则该代码点的结果可能不正确。
如果字符串包含一组非UTF-8的字节则将引发未定义行为。
## upperUTF8
将字符串转换为大写函数假设字符串是以UTF-8编码文本的字符集。
同时函数不检测语言。因此对土耳其人来说,结果可能不完全正确。
如果UTF-8字节序列的长度对于代码点的大写和小写不同则该代码点的结果可能不正确。
如果字符串包含一组非UTF-8的字节则将引发未定义行为。
## isValidUTF8
检查字符串是否为有效的UTF-8编码是则返回1否则返回0。
## toValidUTF8
用`<60>`U+FFFD字符替换无效的UTF-8字符。所有连续的无效字符都会被替换为一个替换字符。
```
toValidUTF8( input_string )
```
参数:
- input_string — 任何一个[String](../../data_types/string.md)类型的对象。
返回值: 有效的UTF-8字符串。
### 示例
```sql
SELECT toValidUTF8('\x61\xF0\x80\x80\x80b')
```
```text
┌─toValidUTF8('a<><61><EFBFBD><EFBFBD>b')─┐
│ a<>b │
└───────────────────────┘
```
## reverse
反转字符串。
## reverseUTF8
以Unicode字符为单位反转UTF-8编码的字符串。如果字符串不是UTF-8编码则可能获取到一个非预期的结果不会抛出异常
## format(pattern, s0, s1, ...)
使用常量字符串`pattern`格式化其他参数。`pattern`字符串中包含由大括号`{}`包围的“替换字段”。 未被包含在大括号中的任何内容都被视为文本内容,它将原样保留在返回值中。 如果你需要在文本内容中包含一个大括号字符,它可以通过加倍来转义:`{{`和`}}`。 字段名称可以是数字(从零开始)或空(然后将它们视为连续数字)
```sql
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
└───────────────────────────────────┘
```
## concat(s1, s2, ...)
将参数中的多个字符串拼接,不带分隔符。
## concatAssumeInjective(s1, s2, ...)
与[concat](./string_functions.md#concat-s1-s2)相同区别在于你需要保证concat(s1, s2, s3) -> s4是单射的它将用于GROUP BY的优化。
## substring(s, offset, length), mid(s, offset, length), substr(s, offset, length)
以字节为单位截取指定位置字符串返回以offset位置为开头长度为length的子串。offset从1开始与标准SQL相同offsetlength参数必须是常量。
## substringUTF8(s, offset, length)
substring相同但其操作单位为Unicode字符函数假设字符串是以UTF-8进行编码的文本。如果不是则可能返回一个预期外的结果不会抛出异常
## appendTrailingCharIfAbsent(s, c)
如果s字符串非空并且末尾不包含c字符则将c字符附加到末尾。
## convertCharset(s, from, to)
返回从from中的编码转换为to中的编码的字符串s
## base64Encode(s)
将字符串s编码成base64
## base64Decode(s)
使用base64将字符串解码成原始字符串。如果失败则抛出异常。
## tryBase64Decode(s)
使用base64将字符串解码成原始字符串。但如果出现错误将返回空字符串。
## endsWith(s, suffix)
返回是否以指定的后缀结尾。如果字符串以指定的后缀结束则返回1否则返回0。
## startsWith(s, prefix)
返回是否以指定的前缀开头。如果字符串以指定的前缀开头则返回1否则返回0。
## trimLeft(s)
返回一个字符串,用于删除左侧的空白字符。
## trimRight(s)
返回一个字符串,用于删除右侧的空白字符。
## trimBoth(s)
返回一个字符串,用于删除任一侧的空白字符。
[来源文章](https://clickhouse.yandex/docs/en/query_language/functions/string_functions/) <!--hide-->