string
String Functions
info
这些函数假定输入字符串包含有效的 UTF-8 编码的 Unicode 码位。它们没有明确检查 UTF-8 编码是否有效,并且如果 UTF-8 编码无效, 函数可能会返回错误的结果。
此外,这些函数操作的是 Unicode 码位,而不是用户可见的字符(或字素簇)。某些语言会将多个码位组合成一个用户感知的字符,即语言书写系统的基本单位,
但这些函数会将每个码位视为一个单独的单位。lower 和 upper 函数不执行某些语言所需的语言区域敏感、上下文敏感或一对多映射。具体来说,
这会对立陶宛语、土耳其语和阿塞拜疆语返回错误的结果。
chr(n) -> varchar
将 Unicode 代码点“n”作为单个字符串返回。
codepoint(string) -> integer
返回“字符串”唯一字符的 Unicode 代码点。
concat(string1, ..., stringN) -> varchar
返回“string1”、“string2”、“...”、“stringN”的串联结果。
此函数提供与 SQL 标准串联运算符(“||”)相同的功能。
ends_with(string, substring) -> boolean
返回“string”是否以“substring”结尾。
from_utf8(binary) -> varchar
将“二进制”解码为 UTF-8 编码的字符串。无效的 UTF-8 序列将被替换为 Unicode 替换字符“U+FFFD”。每个
无效的 UTF-8 码位(包括多字节长度的码位)都将替换为一个替换字符。
from_utf8(binary, replace) -> varchar
将“binary”解码为 UTF-8 编码字符串。无效的 UTF-8 序列将被替换为“replace”。每个无效的 UTF-8 码位(包
括多字节长度的码位)都将替换为一个替换字符。“replace”参数可以是 Unicode 码位 (bigint)、单个字符或空字
符串。当“replace”为空字符串时,无效字符将被删除。
hamming_distance(string1, string2) -> bigint
返回“string1”和“string2”的汉明距离,即对应字符不同的位置数。
注意,两个字符串的长度必须相同。
length(string) -> bigint
返回“string”的字符长度。
levenshtein_distance(string_1, string_2) -> bigint
返回两个字符串的 Levenshtein 编辑距离。即,将“string_1”转换
为“string_2”所需的最小单字符编辑次数(插入、删除或替换)。
lower(string) -> varchar
将“字符串”转换为小写。
lpad(string, size, padstring) -> varchar
使用 ``padstring`` 将 ``string`` 左填充至 ``size`` 个字符。如果 ``size`` 小于
``string`` 的 长度,则结果将被截断至 ``size`` 个字符。``size`` 不能为负数,且 ``padstring`` 必须非空。
ltrim(string) -> varchar
删除字符串中的前导空格。请参阅:func:`trim`函数,了解可识别的空格字符集。
ltrim(string, chars) -> varchar
:noindex:
从 ``string`` 的开头删除仅包含 ``chars`` 中字符的最长子字符串。::
SELECT ltrim('test', 't'); -- est
SELECT ltrim('tetris', 'te'); -- ris
replaceFirst(string, search, replace) -> varchar
删除“string”中第一个“search”和“replace”的匹配项。
如果“search”为空字符串,则在“string”前面插入“replace”。
replace(string, search) -> varchar
从“string”中删除“search”的所有实例。
replace(string, search, replace) -> varchar
将“string”中的所有“search”替换为“replace”。
如果“search”为空字符串,则在每个字符前以及“string”的末尾插入“replace”。
reverse(string) -> varchar
返回以相反顺序排列字符的输入字符串。
reverse(varbinary) -> varbinary
返回以相反顺序排列字节的输入二进制文件。
rpad(string, size, padstring) -> varchar
使用 ``padstring`` 将 ``string`` 右填充至 ``size`` 个字符。如果 ``size`` 小
于 ``string`` 的长度,则结果将被截断至 ``size`` 个字符。``size`` 不能为负数,且 ``padstring`` 必须非空。
rtrim(string) -> varchar
删除字符串尾部的空格。请参阅:func:`trim`函数,了解可识别的空格字符集。
rtrim(string, chars) -> varchar
:noindex:
从 ``string`` 的末尾删除仅包含 ``chars`` 中字符的最长子字符串。
SELECT rtrim('test', 't'); -- tes
SELECT rtrim('test...', '.'); -- test
split(string, delimiter) -> array(string)
根据“分隔符”分割“字符串”并返回一个数组。
split(string, delimiter, limit) -> array(string)
根据“delimiter”分隔“string”,并返回一个大小最多为“limit”的数组。
数组的最后一个元素始终包含字符串中剩余的所有内容。
“limit”必须为正数。
split_part(string, delimiter, index) -> string
根据“delimiter”分隔“string”,并返回索引“index”处的部分。
字段索引从 1 开始。如果索引大于字段数量,则返回 null。
split_to_map(string, entryDelimiter, keyValueDelimiter) -> map<varchar, varchar>
使用 ``entryDelimiter`` 和 ``keyValueDelimiter`` 拆分 ``string`` 并返回一个 map。
``entryDelimiter`` 将 ``string`` 拆分为键值对。``keyValueDelimiter`` 将
每对拆分为键和值。请注意,``entryDelimiter`` 和 ``keyValueDelimiter`` 将被逐字解释,即完整字符串匹配。
``entryDelimiter`` 和 ``keyValueDelimiter`` 不能为空,且不能相同。
``entryDelimiter`` 可以作为尾随字符。
如果存在重复的键,则会引发错误。
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)`` 用于决定对于重复的键,保留第一个值还是最后一个值。(k, v1, v2) -> v1 保留第
一个值。(k, v1, v2) -> v2 保留最后一个值。不支持任意函数。::
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) -> v2)); -- {"a": "3", "b": "2"}
split_to_multimap(string, entryDelimiter, keyValueDelimiter) -> map<varchar, array<varchar>>
使用“entryDelimiter”和“keyValueDelimiter”对“string”进行拆分,并返回一个包含每个唯一键对应的值数组的映射。
“entryDelimiter”将“string”拆分为键值对。“keyValueDelimiter”将每对拆分为键和值。
每个键的值将与其在“string”中出现的顺序相同。
请注意,“entryDelimiter”和“keyValueDelimiter”将按字面意思解释,即完整的字符串匹配。
starts_with(string, substring) -> boolean
返回“string”是否以“substring”开头。
strpos(string, substring) -> bigint
返回“string”中第一个“substring”实例的起始位置。位置从“1”开始。如果未找到,则返回“0”。
strpos(string, substring, instance) -> bigint
返回“string”中“substring”的第 N 个“instance”的位置。
“instance”必须为正数。
位置从“1”开始。如果未找到,则返回“0”。
计算出现次数时会考虑重叠的字符串。::
SELECT strpos('aaa', 'aa', 2); -- 2
strrpos(string, substring) -> bigint
返回“string”中最后一个“substring”的起始位置。位置从“1”开始。如果未找到,则返回“0”。
strrpos(string, substring, instance) -> bigint
返回“string”中从字符串末尾开始第 N 个“substring”实例的位置。
“instance”必须为正数。位置从“1”开始。如果未找到,则返回“0”。
计算出现次数时会考虑重叠的字符串。
SELECT strrpos('aaa', 'aa', 2); -- 1
trail(string, N) -> varchar
返回输入“string”的最后“N”个字符,最多为“string”的长度。
substr(string, start) -> varchar
返回从起始位置“start”开始的“string”的剩余部分。
位置从“1”开始。负的起始位置被解释为相对于字符串末尾的位置。如果“start”的绝对
值大于“string”的长度,则返回空字符串。
substr(string, start, length) -> varchar
从起始位置“start”开始,返回长度为“length”的“string”子字符串。位置从“1”开始。负的起始位置被解释为相对于
字符串末尾的位置。如果“start”的绝对值大于“string”的长度,则返回空字符串。
trim(string) -> varchar
从“字符串”中删除开始和结束的空格。
可 识别的空白字符:
| Code | Description | Code | Description |
|---|---|---|---|
| 9 | TAB (horizontal tab) | U+1680 | Ogham Space Mark |
| 10 | LF (NL line feed, new line) | U+2000 | En Quad |
| 11 | VT (vertical tab) | U+2001 | Em Quad |
| 12 | FF (NP form feed, new page) | U+2002 | En Space |
| 13 | CR (carriage return) | U+2003 | Em Space |
| 28 | FS (file separator) | U+2004 | Three-Per-Em Space |
| 29 | GS (group separator) | U+2005 | Four-Per-Em Space |
| 30 | RS (record separator) | U+2006 | Six-Per-Em Space |
| 31 | US (unit separator) | U+2008 | Punctuation Space |
| 32 | Space | U+2009 | Thin Space |
| _ | _ | U+200a | Hair Space |
| _ | _ | U+2028 | Line Separator |
| _ | _ | U+2029 | Paragraph Separator |
| _ | _ | U+205f | Medium Mathematical Space |
| _ | _ | U+3000 | Ideographic Space |
trim(string, chars) -> varchar
从“string”的开头和结尾删除仅包含“chars”中字符的最长子字符串。
SELECT trim('test', 't'); -- es
SELECT trim('.t.e.s.t.', '.t'); -- e.s
upper(string) -> varchar
将“字符串”转换为大写。
word_stem(word) -> varchar
返回“word”的英文词干。如果“word”不是英文单词,则返回小写的“word”。
word_stem(word, lang) -> varchar
返回 ``lang`` 语言中 ``word`` 的词干。此函数支持以下语言:
| lang | Language |
|---|---|
ca | Catalan |
da | Danish |
de | German |
en | English |
es | Spanish |
eu | Basque |
fi | Finnish |
fr | French |
hu | Hungarian |
hy | Armenian |
ir | Irish |
it | Italian |
lt | Lithuanian |
nl | Dutch |
no | Norwegian |
pt | Portuguese |
ro | Romanian |
ru | Russian |
sv | Swedish |
tr | Turkish |
如果不支持指定的“lang”,则此函数将引发用户错误。
Unicode Functions
normalize(string) -> varchar
使用 NFC 规范形式转换“字符串”。
normalize(string, form) -> varchar
参考:https://unicode.org/reports/tr15/#Norm_Forms
使用指定的范式转换“string”。“form”必须是以下关键字之一:
| Form | Description |
|---|---|
NFD | Canonical Decomposition |
NFC | Canonical Decomposition, followed by Canonical Composition |
NFKD | Compatibility Decomposition |
NFKC | Compatibility Decomposition, followed by Canonical Composition |
info
此 SQL 标准函数具有特殊语法,需要将“form”指定为关键字,而不是字符串。
to_utf8(string) -> varbinary
将“string”编码为 UTF-8 varbinary 表示形式。