Skip to main content
Version: 1.1.1

string

String Functions

info

这些函数假定输入字符串包含有效的 UTF-8 编码的 Unicode 码位。它们没有明确检查 UTF-8 编码是否有效,并且如果 UTF-8 编码无效, 函数可能会返回错误的结果。

此外,这些函数操作的是 Unicode 码位,而不是用户可见的字符(或字素簇)。某些语言会将多个码位组合成一个用户感知的字符,即语言书写系统的基本单位, 但这些函数会将每个码位视为一个单独的单位。lowerupper 函数不执行某些语言所需的语言区域敏感、上下文敏感或一对多映射。具体来说, 这会对立陶宛语、土耳其语和阿塞拜疆语返回错误的结果。

    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


从“字符串”中删除开始和结束的空格。

可识别的空白字符:

CodeDescriptionCodeDescription
9TAB (horizontal tab)U+1680Ogham Space Mark
10LF (NL line feed, new line)U+2000En Quad
11VT (vertical tab)U+2001Em Quad
12FF (NP form feed, new page)U+2002En Space
13CR (carriage return)U+2003Em Space
28FS (file separator)U+2004Three-Per-Em Space
29GS (group separator)U+2005Four-Per-Em Space
30RS (record separator)U+2006Six-Per-Em Space
31US (unit separator)U+2008Punctuation Space
32SpaceU+2009Thin Space
__U+200aHair Space
__U+2028Line Separator
__U+2029Paragraph Separator
__U+205fMedium Mathematical Space
__U+3000Ideographic 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`` 的词干。此函数支持以下语言:
langLanguage
caCatalan
daDanish
deGerman
enEnglish
esSpanish
euBasque
fiFinnish
frFrench
huHungarian
hyArmenian
irIrish
itItalian
ltLithuanian
nlDutch
noNorwegian
ptPortuguese
roRomanian
ruRussian
svSwedish
trTurkish

如果不支持指定的“lang”,则此函数将引发用户错误。

Unicode Functions

    normalize(string) -> varchar

使用 NFC 规范形式转换“字符串”。
    normalize(string, form) -> varchar

参考:https://unicode.org/reports/tr15/#Norm_Forms
使用指定的范式转换“string”。“form”必须是以下关键字之一:
FormDescription
NFDCanonical Decomposition
NFCCanonical Decomposition, followed by Canonical Composition
NFKDCompatibility Decomposition
NFKCCompatibility Decomposition, followed by Canonical Composition
info

此 SQL 标准函数具有特殊语法,需要将“form”指定为关键字,而不是字符串。

    to_utf8(string) -> varbinary

将“string”编码为 UTF-8 varbinary 表示形式。