字符串函数和运算符¶
字符串运算符¶
||
运算符用于执行连接。
字符串函数¶
注意
这些函数假设输入字符串包含有效的 UTF-8 编码的 Unicode 代码点。没有显式检查有效 UTF-8,并且这些函数可能在无效 UTF-8 上返回不正确的结果。可以使用 from_utf8()
来更正无效 UTF-8 数据。
此外,这些函数对 Unicode 代码点进行操作,而不是对用户可见的字符(或音素)。一些语言将多个代码点组合成一个用户感知的字符,即语言的书写系统中的基本单元,但这些函数会将每个代码点视为单独的单元。
lower()
和 upper()
函数不执行某些语言所需的特定于语言环境、特定于上下文的或一对多映射。具体来说,这将对立陶宛语、土耳其语和阿塞拜疆语返回不正确的结果。
- chr(n) -> varchar()¶
将 Unicode 代码点
n
返回为单个字符字符串。
- codepoint(string) -> integer()¶
返回
string
的唯一字符的 Unicode 代码点。
- concat(string1, ..., stringN) -> varchar()¶
返回
string1
、string2
、...
、stringN
的连接。此函数提供与 SQL 标准连接运算符 (||
) 相同的功能。
- ends_with(string, substring) -> boolean()¶
返回
string
是否以substring
结尾。
- hamming_distance(string1, string2) -> bigint()¶
返回
string1
和string2
的汉明距离,即相应字符不同的位置数。请注意,这两个字符串必须具有相同的长度。
- length(string) -> bigint()¶
返回
string
的字符长度。
- levenshtein_distance(string1, string2) -> bigint()¶
返回
string1
和string2
的莱文斯坦编辑距离,即将string1
更改为string2
所需的单字符编辑(插入、删除或替换)的最小数量。
- lower(string) -> varchar()¶
将
string
转换为小写。
- lpad(string, size, padstring) -> varchar()¶
使用
padstring
将string
左边填充到size
个字符。如果size
小于string
的长度,则结果将被截断为size
个字符。size
必须是非负数,并且padstring
不能为空。
- ltrim(string) -> varchar()¶
删除
string
开头的空白字符。有关识别的空白字符集,请参见trim()
。
- ltrim(string, chars) -> varchar()
从
string
开头删除包含chars
中字符的最长子字符串。SELECT ltrim('test', 't'); -- est SELECT ltrim('tetris', 'te'); -- ris
- replace(string, search) -> varchar()¶
从
string
中删除所有search
的实例。
- replace(string, search, replace) -> varchar()¶
将
string
中所有search
的实例替换为replace
。如果
search
是一个空字符串,则在每个字符前面和string
末尾插入replace
。
- replace_first(string, search, replace) -> varchar()¶
- 替换 ``string`` 中 第一个 ``search`` 的 实例为 ``replace`` 。.()¶
如果
search
是一个空字符串,则在string
的开头插入replace
。
- reverse(string) -> varchar()¶
以相反的顺序返回
string
中的字符。
- rpad(string, size, padstring) -> varchar()¶
使用
padstring
将string
右边填充到size
个字符。如果size
小于string
的长度,则结果将被截断为size
个字符。size
必须是非负数,并且padstring
不能为空。
- rtrim(string) -> varchar()¶
删除
string
末尾的空白字符。有关识别的空白字符集,请参见trim()
。
- rtrim(string, chars) -> varchar()
从
string
末尾删除包含chars
中字符的最长子字符串。SELECT rtrim('test', 't'); -- tes SELECT rtrim('test...', '.'); -- test
- split(string, delimiter) -> array(varchar)¶
根据
delimiter
拆分string
并返回一个数组。
- split(string, delimiter, limit) -> array(varchar)¶
根据
delimiter
拆分string
并返回一个大小最多为limit
的数组。数组中的最后一个元素始终包含string
中剩下的所有内容。limit
必须是一个正数。
- split_part(string, delimiter, index) -> varchar()¶
根据
delimiter
拆分string
并返回字段index
。字段索引从1
开始。如果索引大于字段数,则返回 null。
- split_to_map(string, entryDelimiter, keyValueDelimiter) -> map<varchar, varchar>()¶
使用
entryDelimiter
和keyValueDelimiter
拆分string
并返回一个 map。entryDelimiter
将string
拆分为键值对。keyValueDelimiter
将每个对拆分为键和值。请注意,entryDelimiter
和keyValueDelimiter
是按字面意思解释的,即作为完整的字符串匹配。
- split_to_map(string, entryDelimiter, keyValueDelimiter, function(K,V1,V2,R)) -> map<varchar, varchar>()¶
使用
entryDelimiter
和keyValueDelimiter
拆分string
并返回一个 map。entryDelimiter
将string
拆分为键值对。keyValueDelimiter
将每个对拆分为键和值。请注意,entryDelimiter
和keyValueDelimiter
是按字面意思解释的,即作为完整的字符串匹配。在遇到重复键的情况下,会调用function(K,V1,V2,R)
来确定 map 中应该包含的值。SELECT(split_to_map('a:1;b:2;a:3', ';', ':', (k, v1, v2) -> v1)); -- {"a": "1", "b": "2"} SELECT(split_to_map('a:1;b:2;a:3', ';', ':', (k, v1, v2) -> CONCAT(v1, v2))); -- {"a": "13", "b": "2"}
- split_to_multimap(string, entryDelimiter, keyValueDelimiter) -> map(varchar, array(varchar))¶
使用
entryDelimiter
和keyValueDelimiter
拆分string
并返回一个 map,该 map 包含每个唯一键的值数组。entryDelimiter
将string
拆分为键值对。keyValueDelimiter
将每个对拆分为键和值。每个键的值将按照它们在string
中出现的顺序排列。请注意,entryDelimiter
和keyValueDelimiter
是按字面意思解释的,即作为完整的字符串匹配。
- strpos(string, substring) -> bigint()¶
返回
substring
在string
中第一个实例的起始位置。位置从1
开始。如果未找到,则返回0
。
- starts_with(string, substring) -> boolean()¶
返回
string
是否以substring
开头。
- strpos(string, substring, instance) -> bigint()¶
返回
string
中第instance
个substring
的位置。instance
必须为正数。位置从1
开始。如果未找到,则返回0
。
- strrpos(string, substring) -> bigint()¶
返回
string
中最后一个substring
的起始位置。位置从1
开始。如果未找到,则返回0
。
- strrpos(string, substring, instance) -> bigint()¶
从字符串末尾开始,返回
string
中第instance
个substring
的位置。instance
必须为正数。位置从1
开始。如果未找到,则返回0
。
- position(substring IN string) -> bigint()¶
返回
substring
在string
中第一个实例的起始位置。位置从1
开始。如果未找到,则返回0
。
- substr(string, start) -> varchar()¶
从起始位置
start
返回string
的剩余部分。位置从1
开始。负起始位置被解释为相对于字符串末尾。
- substr(string, start, length) -> varchar()¶
从起始位置
start
返回string
中长度为length
的子字符串。位置从1
开始。负起始位置被解释为相对于字符串末尾。
- trail(string, N) -> varchar()¶
返回输入字符串的最后 N 个字符。
- trim(string) -> varchar()¶
从
string
中删除前导和尾随空格。识别空格字符
代码
描述
代码
描述
9
TAB (水平制表符)
U+1680
Ogham 空格标记
10
LF (NL 换行符,换行)
U+2000
En Quad
11
VT (垂直制表符)
U+2001
Em Quad
12
FF (NP 换页符,新页)
U+2002
En Space
13
CR (回车)
U+2003
Em Space
28
FS (文件分隔符)
U+2004
Three-Per-Em Space
29
GS (组分隔符)
U+2005
Four-Per-Em Space
30
RS (记录分隔符)
U+2006
Four-Per-Em Space
31
US (单元分隔符)
U+2008
标点符号空格
32
空格
U+2009
细空格
_
_
U+200a
毛发空格
_
_
U+200a
毛发空格
_
_
U+2028
行分隔符
_
_
U+2029
段落分隔符
_
_
U+205f
中等数学空格
_
_
U+3000
汉字空格
- trim(string, chars) -> varchar()
从
string
的开头和结尾删除包含chars
中字符的最长子字符串。SELECT trim('test', 't'); -- es SELECT trim('.t.e.s.t.', '.t'); -- e.s
- upper(string) -> varchar()¶
将
string
转换为大写。
- word_stem(word) -> varchar()¶
返回英语中
word
的词干。
- word_stem(word, lang) -> varchar()¶
返回
lang
语言中word
的词干。
Unicode 函数¶
- normalize(string) -> varchar()¶
使用 NFC 规范化形式转换
string
。
- normalize(string, form) -> varchar()¶
使用指定的规范化形式转换
string
。form
必须为以下关键字之一形式
描述
NFD
规范分解
NFC
规范分解,然后是规范组合
NFKD
兼容性分解
NFKC
兼容性分解,然后是规范组合
注意
此 SQL 标准函数具有特殊的语法,需要将
form
指定为关键字,而不是字符串。
- to_utf8(string) -> varbinary()¶
将
string
编码为 UTF-8 varbinary 表示形式。
- from_utf8(binary) -> varchar()¶
从
binary
中解码 UTF-8 编码的字符串。无效的 UTF-8 序列将替换为 Unicode 替换字符U+FFFD
。
- from_utf8(binary, replace) -> varchar()¶
从
binary
中解码 UTF-8 编码的字符串。无效的 UTF-8 序列将替换为 replace。替换字符串 replace 必须是单个字符或为空(在这种情况下,将删除无效字符)。
- key_sampling_percent(varchar) -> double()¶
根据给定
varchar
的哈希生成 0.0 到 1.0 之间的双精度值。此函数对于数据的确定性采样非常有用。