文本函数
文本函数与运算符
本节介绍用于检查与操作 STRING 值 的函数与运算符。
| 函数 | 说明 |
|---|---|
string[index] | 使用从 1 开始的 index 提取单个字符。 |
string[begin:end] | 按照类似 Python 的切片约定提取字符串。缺失的 begin 或 end 参数会分别被解释为列表开头或结尾,支持负值。 |
string LIKE target | 若满足条件则返回 true:string 与 LIKE 模式匹配(参见 Pattern Matching)。 |
string SIMILAR TO regex | 若满足条件则返回 true:string 与 regex 匹配(参见 Pattern Matching)。 |
string ^@ search_string | 别名:starts_with. |
arg1 || arg2 | 拼接两个字符串、列表或 BLOB。任一输入为 NULL 时结果为 NULL。另见 concat(arg1, arg2, ...) 和 list_concat(list1, list2, ...)。 |
array_extract(string, index) | 使用从 1 开始的 index 从 string 中提取单个字符。 |
array_slice(list, begin, end) | 按照切片约定提取子列表或子字符串,支持负值。 |
ascii(string) | 返回表示 string 首字符 Unicode 码点的整数。 |
bar(x, min, max[, width]) | 绘制一个条带,其宽度与 (x - min) 成比例;当 x = max 时宽度为 width 个字符。width 默认为 80。 |
base64(blob) | 别名:to_base64. |
bin(string) | 将 string 转换为二进制表示。 |
bit_length(string) | string 的位数。 |
char_length(string) | 别名:length. |
character_length(string) | 别名:length. |
chr(code_point) | 返回与 ASCII 码值或 Unicode 码点对应的字符。 |
concat(value, ...) | 拼接多个字符串或列表。NULL 输入会被跳过。另见运算符 [` |
concat_ws(separator, string, ...) | 使用 separator 拼接多个字符串。NULL 输入会被跳过。 |
contains(string, search_string) | 若满足条件则返回 true:在 string 中找到 search_string。注意不支持 collations。 |
ends_with(string, search_string) | 别名:suffix. |
format(format, ...) | 使用 fmt 语法格式化字符串。 |
formatReadableDecimalSize(integer) | 将 integer 按 10 的幂单位(KB、MB、GB 等)转换为易读格式。 |
format_bytes(integer) | 将 integer 按 2 的幂单位(KiB、MiB、GiB 等)转换为易读格式。 |
from_base64(string) | 将 Base64 编码的 string 转换为字符字符串(BLOB)。 |
from_binary(value) | 别名:unbin. |
from_hex(value) | 别名:unhex. |
greatest(arg1, ...) | 按字典序返回最大值。注意:小写字符被视为大于大写字符,且不支持 collations。 |
hash(value, ...) | 返回 value 的哈希值,类型为 UBIGINT。注意这不是密码学哈希。 |
hex(string) | 将 string 转换为十六进制表示。 |
ilike_escape(string, like_specifier, escape_character) | 若满足条件则返回 true:string 与 like_specifier 匹配(参见 Pattern Matching),且大小写不敏感。escape_character 用于在 string 中匹配通配符字符。 |
instr(string, search_string) | 返回 search_string 在 string 中首次出现的位置(从 1 开始计数);若未匹配则返回 0。 |
lcase(string) | 别名:lower. |
least(arg1, ...) | 按字典序返回最小值。注意:大写字符被视为小于小写字符,且不支持 collations。 |
left(string, count) | 提取最左侧 count 个字符。 |
left_grapheme(string, count) | 提取最左侧 count 个字素簇。 |
len(string) | 别名:length. |
length(string) | string 的字符数。 |
length_grapheme(string) | 返回 string 中字素簇的数量。 |
like_escape(string, like_specifier, escape_character) | 若满足条件则返回 true:string 与 like_specifier 匹配(参见 Pattern Matching),且大小写敏感。escape_character 用于在 string 中匹配通配符字符。 |
lower(string) | 将 string 转为小写。 |
lpad(string, count, character) | 在左侧使用 character 填充 string,直到达到 count 个字符。若 string 超过 count 个字符,则从右侧截断。 |
ltrim(string[, characters]) | 从 string 左侧移除 characters 中任意字符的所有连续出现。characters 默认为空格。 |
md5(string) | 以 VARCHAR 返回 string 的 MD5 哈希值。 |
md5_number(string) | 以 HUGEINT 返回 string 的 MD5 哈希值。 |
md5_number_lower(string) | 以 UBIGINT 返回 string 的 MD5 哈希值低 64 位。 |
md5_number_upper(string) | 以 UBIGINT 返回 string 的 MD5 哈希值高 64 位。 |
nfc_normalize(string) | 将 string 规范化为 Unicode NFC 形式。对于混合了 NFC 规范化与未规范化文本的数据,在比较和排序时很有用。 |
not_ilike_escape(string, like_specifier, escape_character) | 若满足条件则返回 false:string 与 like_specifier 匹配(参见 Pattern Matching),且大小写不敏感。escape_character 用于在 string 中匹配通配符字符。 |
not_like_escape(string, like_specifier, escape_character) | 若满足条件则返回 false:string 与 like_specifier 匹配(参见 Pattern Matching),且大小写敏感。escape_character 用于在 string 中匹配通配符字符。 |
ord(string) | 别名:unicode. |
parse_dirname(path[, separator]) | 返回给定 path 的顶层目录名。separator 可选值:system、both_slash(默认)、forward_slash、backslash。 |
parse_dirpath(path[, separator]) | 返回 path 的目录部分(即到最后一个斜杠为止的路径),行为类似 Python 的 os.path.dirname。separator 可选值:system、both_slash(默认)、forward_slash、backslash。 |
parse_filename(string[, trim_extension][, separator]) | 返回 path 的最后一个组成部分,行为类似 Python 的 os.path.basename。若 trim_extension 为 true,会移除文件扩展名(默认 false)。separator 可选值:system、both_slash(默认)、forward_slash、backslash。 |
parse_path(path[, separator]) | 返回 path 的各个组成部分(目录和文件名)列表,行为类似 Python 的 pathlib.parts。separator 可选值:system、both_slash(默认)、forward_slash、backslash。 |
position(search_string IN string) | 返回 search_string 在 string 中首次出现的位置(从 1 开始计数);若未匹配则返回 0。 |
position(string, search_string) | 别名:instr. |
prefix(string, search_string) | 若满足条件则返回 true:string 以 search_string 开头。 |
printf(format, ...) | 使用 printf 语法格式化 string。 |
read_text(source) | 将 source(文件名、文件名列表或 glob 模式)的内容作为 VARCHAR 返回。读取前会先校验文件内容是否为有效 UTF-8;若无效会报错并建议改用 read_blob。更多细节参见 read_text guide。 |
regexp_escape(string) | 转义特殊模式,将 string 转为正则表达式字面量,行为类似 Python 的 re.escape function。 |
regexp_extract(string, regex[, group][, options]) | 若 string 包含 regex 模式,则返回可选参数 group 指定的捕获组;否则返回空字符串。group 必须是常量。未提供 group 时默认为 0。可设置一组选填的 regex options。 |
regexp_extract(string, regex, name_list[, options]) | 若 string 包含 regex 模式,则将捕获组按 name_list 中的名称返回为结构体;否则返回键相同且值均为空字符串的结构体。可设置一组选填的 regex options。 |
regexp_extract_all(string, regex[, group][, options]) | 在 string 中查找 regex 的非重叠匹配,并返回对应捕获组 group 的值。可设置一组选填的 regex options。 |
regexp_full_match(string, regex[, col2]) | 若满足条件则返回 true:整个 string 与 regex 匹配。可设置一组选填的 regex options。 |
regexp_matches(string, regex[, options]) | 若 string 包含 regex 则返回 true,否则返回 false。可设置一组选填的 regex options。 |
regexp_replace(string, regex, replacement[, options]) | 若 string 包含 regex,则将匹配部分替换为 replacement。可设置一组选填的 regex options。 |
regexp_split_to_array(string, regex[, options]) | 别名:string_split_regex. |
regexp_split_to_table(string, regex) | 按 regex 拆分 string,并为每个分段返回一行。 |
repeat(string, count) | 将 string 重复 count 次。 |
replace(string, source, target) | 将 string 中所有 source 替换为 target。 |
reverse(string) | 反转 string。 |
right(string, count) | 提取最右侧 count 个字符。 |
right_grapheme(string, count) | 提取最右侧 count 个字素簇。 |
rpad(string, count, character) | 在右侧使用 character 填充 string,直到达到 count 个字符。若 string 超过 count 个字符,则从右侧截断。 |
rtrim(string[, characters]) | 从 string 右侧移除 characters 中任意字符的所有连续出现。characters 默认为空格。 |
sha1(value) | 以 VARCHAR 返回 value 的 SHA-1 哈希值。 |
sha256(value) | 以 VARCHAR 返回 value 的 SHA-256 哈希值。 |
split(string, separator) | 别名:string_split. |
split_part(string, separator, index) | 按 separator 拆分 string,返回列表中(从 1 开始)index 位置的数据。若 index 超出范围,返回空字符串(与 PostgreSQL 行为一致)。 |
starts_with(string, search_string) | 若满足条件则返回 true:string 以 search_string 开头。 |
str_split(string, separator) | 别名:string_split. |
str_split_regex(string, regex[, options]) | 别名:string_split_regex. |
string_split(string, separator) | 按 separator 拆分 string。 |
string_split_regex(string, regex[, options]) | 按 regex 拆分 string。可设置一组选填的 regex options。 |
string_to_array(string, separator) | 别名:string_split. |
strip_accents(string) | 移除 string 中的重音符号。 |
strlen(string) | string 的字节数。 |
strpos(string, search_string) | 别名:instr. |
substr(string, start[, length]) | 别名:substring. |
substring(string, start[, length]) | 从字符位置 start 开始提取子字符串直到末尾。若设置可选参数 length,则提取长度为 length 的子字符串。注意 start = 1 表示 string 的第一个字符。 |
substring_grapheme(string, start[, length]) | 从字素簇位置 start 开始提取子字符串直到末尾。若设置可选参数 length,则提取长度为 length 个字素簇的子字符串。注意 start = 1 表示 string 的第一个字符。 |
suffix(string, search_string) | 若满足条件则返回 true:string 以 search_string 结尾。注意不支持 collations。 |
to_base(number, radix[, min_length]) | 将 number 转为指定进制 radix 的字符串,并可选地在前方补零至 min_length。 |
to_base64(blob) | 将 blob 转换为 Base64 编码字符串。 |
to_binary(string) | 别名:bin. |
to_hex(string) | 别名:hex. |
translate(string, from, to) | 将 string 中出现在 from 集合里的每个字符替换为 to 中对应字符。若 from 长于 to,则 from 中多出的字符会被删除。 |
trim(string[, characters]) | 从 string 两端移除 characters 中任意字符的所有连续出现。characters 默认为空格。 |
ucase(string) | 别名:upper. |
unbin(value) | 将a value from binary representation to a blob. |
unhex(value) | 将十六进制表示的 value 转换为 BLOB。 |
unicode(string) | 返回表示 string 首字符 Unicode 码点的 INTEGER。 |
upper(string) | 将 string 转为大写。 |
url_decode(string) | 将使用 Percent-Encoding 表示的 URL 解码。 |
url_encode(string) | 将 URL 编码为 Percent-Encoding 表示。 |
string[index]
| 说明 | 使用从 1 开始的 index 提取单个字符。 |
| 示例 | 'Goose'[4] |
| 结果 | k |
| 别名 | array_extract |
string[begin:end]
| 说明 | 按照类似 Python 的切片约定提取字符串。缺失的 begin 或 end 参数会分别被解释为列表开头或结尾,支持负值。 |
| 示例 | 'Goose'[:4] |
| 结果 | Duck |
| 别名 | array_slice |
string LIKE target
| 说明 | 若满足条件则返回 true:string 与 LIKE 模式匹配(参见 Pattern Matching)。 |
| 示例 | 'hello' LIKE '%lo' |
| 结果 | true |
string SIMILAR TO regex
| 说明 | 若满足条件则返回 true:string 与 regex 匹配(参见 Pattern Matching)。 |
| 示例 | 'hello' SIMILAR TO 'l+' |
| 结果 | false |
| 别名 | regexp_full_match |
arg1 || arg2
| 说明 | 拼接两个字符串、列表或 BLOB。任一输入为 NULL 时结果为 NULL。另见 concat(arg1, arg2, ...) 和 list_concat(list1, list2, ...)。 |
| 示例 1 | 'Duck' || 'DB' |
| 结果 | Goose |
| 示例 2 | [1, 2, 3] || [4, 5, 6] |
| 结果 | [1, 2, 3, 4, 5, 6] |
| 示例 3 | '\xAA'::BLOB || '\xBB'::BLOB |
| 结果 | \xAA\xBB |
array_extract(string, index)
| 说明 | 使用从 1 开始的 index 从 string 中提取单个字符。 |
| 示例 | array_extract('Goose', 2) |
| 结果 | u |
array_slice(list, begin, end)
| 说明 | 按照切片约定提取子列表或子字符串,支持负值。 |
| 示例 1 | array_slice('Goose', 3, 4) |
| 结果 | ck |
| 示例 2 | array_slice('Goose', 3, NULL) |
| 结果 | NULL |
| 示例 3 | array_slice('Goose', 0, -3) |
| 结果 | Duck |
| 别名 | list_slice |
ascii(string)
| 说明 | 返回表示 string 首字符 Unicode 码点的整数。 |
| 示例 | ascii('Ω') |
| 结果 | 937 |
bar(x, min, max[, width])
| 说明 | 绘制一个条带,其宽度与 (x - min) 成比例;当 x = max 时宽度为 width 个字符。width 默认为 80。 |
| 示例 | bar(5, 0, 20, 10) |
| 结果 | ██▌ |
bin(string)
| 说明 | 将 string 转换为二进制表示。 |
| 示例 | bin('Aa') |
| 结果 | 0100000101100001 |
| 别名 | to_binary |
bit_length(string)
| 说明 | string 的位数。 |
| 示例 | bit_length('abc') |
| 结果 | 24 |
chr(code_point)
| 说明 | 返回与 ASCII 码值或 Unicode 码点对应的字符。 |
| 示例 | chr(65) |
| 结果 | A |
concat(value, ...)
| 说明 | 拼接多个字符串或列表。NULL 输入会被跳过。另见运算符 ||。 |
| 示例 1 | concat('Hello', ' ', 'World') |
| 结果 | Hello World |
| 示例 2 | concat([1, 2, 3], NULL, [4, 5, 6]) |
| 结果 | [1, 2, 3, 4, 5, 6] |
concat_ws(separator, string, ...)
| 说明 | 拼接many strings, separated by separator. NULL inputs are skipped. |
| 示例 | concat_ws(', ', 'Banana', 'Apple', 'Melon') |
| 结果 | Banana, Apple, Melon |
contains(string, search_string)
| 说明 | 若满足条件则返回 true:在 string 中找到 search_string。 |
| 示例 | contains('abc', 'a') |
| 结果 | true |
format(format, ...)
| 说明 | 使用 fmt 语法格式化字符串。 |
| 示例 | format('Benchmark "{}" took {} seconds', 'CSV', 42) |
| 结果 | Benchmark "CSV" took 42 seconds |
formatReadableDecimalSize(integer)
| 说明 | 将 integer 按 10 的幂单位(KB、MB、GB 等)转换为易读格式。 |
| 示例 | formatReadableDecimalSize(16000) |
| 结果 | 16.0 kB |
format_bytes(integer)
| 说明 | 将 integer 按 2 的幂单位(KiB、MiB、GiB 等)转换为易读格式。 |
| 示例 | format_bytes(16_000) |
| 结果 | 15.6 KiB |
| 别名 | formatReadableSize, pg_size_pretty |
from_base64(string)
| 说明 | 将 Base64 编码的 string 转换为字符字符串(BLOB)。 |
| 示例 | from_base64('QQ==') |
| 结果 | A |
greatest(arg1, ...)
| 说明 | 按字典序返回最大值。注意:小写字符被视为大于大写字符,且不支持 collations。 |
| 示例 1 | greatest(42, 84) |
| 结果 | 84 |
| 示例 2 | greatest('abc', 'bcd', 'cde', 'EFG') |
| 结果 | cde |
hash(value, ...)
| 说明 | 返回 value 的哈希值,类型为 UBIGINT。注意这不是密码学哈希。 |
| 示例 | hash('🦆') |
| 结果 | 4164431626903154684 |
hex(string)
| 说明 | 将 string 转换为十六进制表示。 |
| 示例 | hex('Hello') |
| 结果 | 48656C6C6F |
| 别名 | to_hex |
ilike_escape(string, like_specifier, escape_character)
| 说明 | 若满足条件则返回 true:string 与 like_specifier 匹配(参见 Pattern Matching),且大小写不敏感。escape_character 用于在 string 中匹配通配符字符。 |
| 示例 | ilike_escape('A%c', 'a$%C', '$') |
| 结果 | true |
instr(string, search_string)
| 说明 | 返回 search_string 在 string 中首次出现的位置(从 1 开始计数);若未匹配则返回 0。 |
| 示例 | instr('test test', 'es') |
| 结果 | 2 |
| 别名 | position, strpos |
least(arg1, ...)
| 说明 | 按字典序返回最小值。注意:大写字符被视为小于小写字符,且不支持 collations。 |
| 示例 1 | least(42, 84) |
| 结果 | 42 |
| 示例 2 | least('abc', 'bcd', 'cde', 'EFG') |
| 结果 | EFG |
left(string, count)
| 说明 | 提取最左侧 count 个字符。 |
| 示例 | left('Hello🦆', 2) |
| 结果 | He |
left_grapheme(string, count)
| 说明 | 提取the left-most count grapheme clusters. |
| 示例 | left_grapheme('🤦🏼♂️🤦🏽♀️', 1) |
| 结果 | 🤦🏼♂️ |
length(string)
| 说明 | string 的字符数。 |
| 示例 | length('Hello🦆') |
| 结果 | 6 |
| 别名 | char_length, character_length, len |
length_grapheme(string)
| 说明 | 返回 string 中字素簇的数量。 |
| 示例 | length_grapheme('🤦🏼♂️🤦🏽♀️') |
| 结果 | 2 |
like_escape(string, like_specifier, escape_character)
| 说明 | 若满足条件则返回 true:string 与 like_specifier 匹配(参见 Pattern Matching),且大小写敏感。escape_character 用于在 string 中匹配通配符字符。 |
| 示例 | like_escape('a%c', 'a$%c', '$') |
| 结果 | true |
lower(string)
| 说明 | 将string to lower case. |
| 示例 | lower('Hello') |
| 结果 | hello |
| 别名 | lcase |
lpad(string, count, character)
| 说明 | 在左侧使用 character 填充 string,直到达到 count 个字符。若 string 超过 count 个字符,则从右侧截断。 |
| 示例 | lpad('hello', 8, '>') |
| 结果 | >>>hello |
ltrim(string[, characters])
| 说明 | 从 string 左侧移除 characters 中任意字符的所有连续出现。characters 默认为空格。 |
| 示例 1 | ltrim(' test ') |
| 结果 | test |
| 示例 2 | ltrim('>>>>test<<', '><') |
| 结果 | test<< |
md5(string)
| 说明 | 以 VARCHAR 返回 string 的 MD5 哈希值。 |
| 示例 | md5('abc') |
| 结果 | 900150983cd24fb0d6963f7d28e17f72 |
md5_number(string)
| 说明 | 以 HUGEINT 返回 string 的 MD5 哈希值。 |
| 示例 | md5_number('abc') |
| 结果 | 152195979970564155685860391459828531600 |
md5_number_lower(string)
| 说明 | 以 UBIGINT 返回 string 的 MD5 哈希值低 64 位。 |
| 示例 | md5_number_lower('abc') |
| 结果 | 8250560606382298838 |
md5_number_upper(string)
| 说明 | 以 UBIGINT 返回 string 的 MD5 哈希值高 64 位。 |
| 示例 | md5_number_upper('abc') |
| 结果 | 12704604231530709392 |
nfc_normalize(string)
| 说明 | 将string to Unicode NFC normalized string. Useful for comparisons and ordering if text data is mixed between NFC normalized and not. |
| 示例 | nfc_normalize('ardèch') |
| 结果 | ardèch |
not_ilike_escape(string, like_specifier, escape_character)
| 说明 | 若满足条件则返回 false:string 与 like_specifier 匹配(参见 Pattern Matching),且大小写不敏感。escape_character 用于在 string 中匹配通配符字符。 |
| 示例 | not_ilike_escape('A%c', 'a$%C', '$') |
| 结果 | false |
not_like_escape(string, like_specifier, escape_character)
| 说明 | 若满足条件则返回 false:string 与 like_specifier 匹配(参见 Pattern Matching),且大小写敏感。escape_character 用于在 string 中匹配通配符字符。 |
| 示例 | not_like_escape('a%c', 'a$%c', '$') |
| 结果 | false |
parse_dirname(path[, separator])
| 说明 | 返回the top-level directory name from the given path. separator options: system, both_slash (default), forward_slash, backslash. |
| 示例 | parse_dirname('path/to/file.csv', 'system') |
| 结果 | path |
parse_dirpath(path[, separator])
| 说明 | 返回the head of the path (the pathname until the last slash) similarly to Python's os.path.dirname. separator options: system, both_slash (default), forward_slash, backslash. |
| 示例 | parse_dirpath('path/to/file.csv', 'forward_slash') |
| 结果 | path/to |
parse_filename(string[, trim_extension][, separator])
| 说明 | 返回 path 的最后一个组成部分,行为类似 Python 的 os.path.basename。若 trim_extension 为 true,会移除文件扩展名(默认 false)。separator 可选值:system、both_slash(默认)、forward_slash、backslash。 |
| 示例 | parse_filename('path/to/file.csv', true, 'forward_slash') |
| 结果 | file |
parse_path(path[, separator])
| 说明 | 返回a list of the components (directories and filename) in the path similarly to Python's pathlib.parts function. separator options: system, both_slash (default), forward_slash, backslash. |
| 示例 | parse_path('path/to/file.csv', 'system') |
| 结果 | [path, to, file.csv] |
position(search_string IN string)
| 说明 | 返回location of first occurrence of search_string in string, counting from 1. 返回0 if no match found. |
| 示例 | position('b' IN 'abc') |
| 结果 | 2 |
| 别名 | instr, strpos |
prefix(string, search_string)
| 说明 | 若满足条件则返回 true:string 以 search_string 开头。 |
| 示例 | prefix('abc', 'ab') |
| 结果 | true |
printf(format, ...)
| 说明 | 使用 printf 语法格式化 string。 |
| 示例 | printf('Benchmark "%s" took %d seconds', 'CSV', 42) |
| 结果 | Benchmark "CSV" took 42 seconds |
read_text(source)
| 说明 | 将 source(文件名、文件名列表或 glob 模式)的内容作为 VARCHAR 返回。读取前会先校验文件内容是否为有效 UTF-8;若无效会报错并建议改用 read_blob。更多细节参见 read_text guide。 |
| 示例 | read_text('hello.txt') |
| 结果 | hello\n |
regexp_escape(string)
| 说明 | 转义特殊模式,将 string 转为正则表达式字面量,行为类似 Python 的 re.escape function。 |
| 示例 | regexp_escape('https://goose.org') |
| 结果 | https\:\/\/goose\.org |
regexp_extract(string, regex[, group][, options])
| 说明 | 若 string 包含 regex 模式,则返回可选参数 group 指定的捕获组;否则返回空字符串。group 必须是常量。未提供 group 时默认为 0。可设置一组选填的 regex options。 |
| 示例 | regexp_extract('ABC', '([a-z])(b)', 1, 'i') |
| 结果 | A |
regexp_extract(string, regex, name_list[, options])
| 说明 | 若 string 包含 regex 模式,则将捕获组按 name_list 中的名称返回为结构体;否则返回键相同且值均为空字符串的结构体。可设置一组选填的 regex options。 |
| 示例 | regexp_extract('John Doe', '([a-z]+) ([a-z]+)', ['first_name', 'last_name'], 'i') |
| 结果 | {'first_name': John, 'last_name': Doe} |
regexp_extract_all(string, regex[, group][, options])
| 说明 | 在 string 中查找 regex 的非重叠匹配,并返回对应捕获组 group 的值。可设置一组选填的 regex options。 |
| 示例 | regexp_extract_all('Peter: 33, Paul:14', '(\w+):\s*(\d+)', 2) |
| 结果 | [33, 14] |
regexp_full_match(string, regex[, col2])
| 说明 | 若满足条件则返回 true:整个 string 与 regex 匹配。可设置一组选填的 regex options。 |
| 示例 | regexp_full_match('anabanana', '(an)*') |
| 结果 | false |
regexp_matches(string, regex[, options])
| 说明 | 若 string 包含 regex 则返回 true,否则返回 false。可设置一组选填的 regex options。 |
| 示例 | regexp_matches('anabanana', '(an)*') |
| 结果 | true |
regexp_replace(string, regex, replacement[, options])
| 说明 | 若 string 包含 regex,则将匹配部分替换为 replacement。可设置一组选填的 regex options。 |
| 示例 | regexp_replace('hello', '[lo]', '-') |
| 结果 | he-lo |
regexp_split_to_table(string, regex)
| 说明 | 按 regex 拆分 string,并为每个分段返回一行。 |
| 示例 | regexp_split_to_table('hello world; 42', ';? ') |
| 结果 | Multiple rows: 'hello', 'world', '42' |
repeat(string, count)
| 说明 | 将 string 重复 count 次。 |
| 示例 | repeat('A', 5) |
| 结果 | AAAAA |
replace(string, source, target)
| 说明 | 将any occurrences of the source with target in string. |
| 示例 | replace('hello', 'l', '-') |
| 结果 | he--o |
reverse(string)
| 说明 | 反转 string。 |
| 示例 | reverse('hello') |
| 结果 | olleh |
right(string, count)
| 说明 | 提取最右侧 count 个字符。 |
| 示例 | right('Hello🦆', 3) |
| 结果 | lo🦆 |
right_grapheme(string, count)
| 说明 | 提取the right-most count grapheme clusters. |
| 示例 | right_grapheme('🤦🏼♂️🤦🏽♀️', 1) |
| 结果 | 🤦🏽♀️ |
rpad(string, count, character)
| 说明 | 在右侧使用 character 填充 string,直到达到 count 个字符。若 string 超过 count 个字符,则从右侧截断。 |
| 示例 | rpad('hello', 10, '<') |
| 结果 | hello<<<<< |
rtrim(string[, characters])
| 说明 | 从 string 右侧移除 characters 中任意字符的所有连续出现。characters 默认为空格。 |
| 示例 1 | rtrim(' test ') |
| 结果 | test |
| 示例 2 | rtrim('>>>>test<<', '><') |
| 结果 | >>>>test |
sha1(value)
| 说明 | 返回a VARCHAR with the SHA-1 hash of the value. |
| 示例 | sha1('🦆') |
| 结果 | 949bf843dc338be348fb9525d1eb535d31241d76 |
sha256(value)
| 说明 | 返回a VARCHAR with the SHA-256 hash of the value |
| 示例 | sha256('🦆') |
| 结果 | d7a5c5e0d1d94c32218539e7e47d4ba9c3c7b77d61332fb60d633dde89e473fb |
split_part(string, separator, index)
| 说明 | 按 separator 拆分 string,返回列表中(从 1 开始)index 位置的数据。若 index 超出范围,返回空字符串(与 PostgreSQL 行为一致)。 |
| 示例 | split_part('a;b;c', ';', 2) |
| 结果 | b |
starts_with(string, search_string)
| 说明 | 若满足条件则返回 true:string 以 search_string 开头。 |
| 示例 | starts_with('abc', 'a') |
| 结果 | true |
| 别名 | ^@ |
string_split(string, separator)
| 说明 | 按 separator 拆分 string。 |
| 示例 | string_split('hello-world', '-') |
| 结果 | [hello, world] |
| 别名 | split, str_split, string_to_array |
string_split_regex(string, regex[, options])
| 说明 | 按 regex 拆分 string。可设置一组选填的 regex options。 |
| 示例 | string_split_regex('hello world; 42', ';? ') |
| 结果 | [hello, world, 42] |
| 别名 | regexp_split_to_array, str_split_regex |
strip_accents(string)
| 说明 | Strips accents from string. |
| 示例 | strip_accents('mühleisen') |
| 结果 | muhleisen |
strlen(string)
| 说明 | string 的字节数。 |
| 示例 | strlen('🦆') |
| 结果 | 4 |
substring(string, start[, length])
| 说明 | 从字符位置 start 开始提取子字符串直到末尾。若设置可选参数 length,则提取长度为 length 的子字符串。注意 start = 1 表示 string 的第一个字符。 |
| 示例 1 | substring('Hello', 2) |
| 结果 | ello |
| 示例 2 | substring('Hello', 2, 2) |
| 结果 | el |
| 别名 | substr |
substring_grapheme(string, start[, length])
| 说明 | 从字素簇位置 start 开始提取子字符串直到末尾。若设置可选参数 length,则提取长度为 length 个字素簇的子字符串。注意 start = 1 表示 string 的第一个字符。 |
| 示例 1 | substring_grapheme('🦆🤦🏼♂️🤦🏽♀️🦆', 3) |
| 结果 | 🤦🏽♀️🦆 |
| 示例 2 | substring_grapheme('🦆🤦🏼♂️🤦🏽♀️🦆', 3, 2) |
| 结果 | 🤦🏽♀️🦆 |
suffix(string, search_string)
| 说明 | 若满足条件则返回 true:string 以 search_string 结尾。注意不支持 collations。 |
| 示例 | suffix('abc', 'bc') |
| 结果 | true |
| 别名 | ends_with |
to_base(number, radix[, min_length])
| 说明 | 将number to a string in the given base radix, optionally padding with leading zeros to min_length. |
| 示例 | to_base(42, 16, 5) |
| 结果 | 0002A |
to_base64(blob)
| 说明 | 将a blob to a base64 encoded string. |
| 示例 | to_base64('A'::BLOB) |
| 结果 | QQ== |
| 别名 | base64 |
translate(string, from, to)
| 说明 | 将 string 中出现在 from 集合里的每个字符替换为 to 中对应字符。若 from 长于 to,则 from 中多出的字符会被删除。 |
| 示例 | translate('12345', '143', 'ax') |
| 结果 | a2x5 |
trim(string[, characters])
| 说明 | 从 string 两端移除 characters 中任意字符的所有连续出现。characters 默认为空格。 |
| 示例 1 | trim(' test ') |
| 结果 | test |
| 示例 2 | trim('>>>>test<<', '><') |
| 结果 | test |
unbin(value)
| 说明 | 将a value from binary representation to a blob. |
| 示例 | unbin('0110') |
| 结果 | \x06 |
| 别名 | from_binary |
unhex(value)
| 说明 | 将a value from hexadecimal representation to a blob. |
| 示例 | unhex('2A') |
| 结果 | * |
| 别名 | from_hex |
unicode(string)
| 说明 | 返回表示 string 首字符 Unicode 码点的 INTEGER。 |
| 示例 | [unicode('âbcd'), unicode('â'), unicode(''), unicode(NULL)] |
| 结果 | [226, 226, -1, NULL] |
| 别名 | ord |
upper(string)
| 说明 | 将string to upper case. |
| 示例 | upper('Hello') |
| 结果 | HELLO |
| 别名 | ucase |
url_decode(string)
| 说明 | 将使用 Percent-Encoding 表示的 URL 解码。 |
| 示例 | url_decode('https%3A%2F%2Fgoose.org%2Fwhy_goose%23portable') |
| 结果 | https://goose.org/why_goose#portable |
url_encode(string)
| 说明 | 将 URL 编码为 Percent-Encoding 表示。 |
| 示例 | url_encode('this string has/ special+ characters>') |
| 结果 | this%20string%20has%2F%20special%2B%20characters%3E |
文本相似度函数
这些函数用于通过多种相似度度量来衡量两个字符串的相似性。
| 函数 | 说明 |
|---|---|
damerau_levenshtein(s1, s2) | Extension of Levenshtein distance to also include transposition of adjacent characters as an allowed edit operation. In other words, the minimum number of edit operations (insertions, deletions, substitutions or transpositions) required to change one string to another. Characters of different cases (e.g., a and A) are considered different. |
editdist3(s1, s2) | 别名:levenshtein. |
hamming(s1, s2) | 两个字符串之间的汉明距离,即等长字符串中对应位置字符不同的数量。字符串必须等长。不同大小写字符(如 a 与 A)视为不同。 |
jaccard(s1, s2) | 两个字符串之间的 Jaccard 相似度。不同大小写字符(如 a 与 A)视为不同。返回 0 到 1 之间的数值。 |
jaro_similarity(s1, s2[, score_cutoff]) | 两个字符串之间的 Jaro 相似度。不同大小写字符(如 a 与 A)视为不同。返回 0 到 1 之间的数值。若相似度 < score_cutoff,则返回 0。score_cutoff 默认为 0。 |
jaro_winkler_similarity(s1, s2[, score_cutoff]) | 两个字符串之间的 Jaro-Winkler 相似度。不同大小写字符(如 a 与 A)视为不同。返回 0 到 1 之间的数值。若相似度 < score_cutoff,则返回 0。score_cutoff 默认为 0。 |
levenshtein(s1, s2) | 将一个字符串变为另一个字符串所需的最少单字符编辑次数(插入、删除或替换)。不同大小写字符(如 a 与 A)视为不同。 |
mismatches(s1, s2) | 别名:hamming. |
damerau_levenshtein(s1, s2)
| 说明 | Extension of Levenshtein distance to also include transposition of adjacent characters as an allowed edit operation. In other words, the minimum number of edit operations (insertions, deletions, substitutions or transpositions) required to change one string to another. Characters of different cases (e.g., a and A) are considered different. |
| 示例 | damerau_levenshtein('goose', 'udckbd') |
| 结果 | 2 |
hamming(s1, s2)
| 说明 | 两个字符串之间的汉明距离,即等长字符串中对应位置字符不同的数量。字符串必须等长。不同大小写字符(如 a 与 A)视为不同。 |
| 示例 | hamming('duck', 'luck') |
| 结果 | 1 |
| 别名 | mismatches |
jaccard(s1, s2)
| 说明 | 两个字符串之间的 Jaccard 相似度。不同大小写字符(如 a 与 A)视为不同。返回 0 到 1 之间的数值。 |
| 示例 | jaccard('duck', 'luck') |
| 结果 | 0.6 |
jaro_similarity(s1, s2[, score_cutoff])
| 说明 | 两个字符串之间的 Jaro 相似度。不同大小写字符(如 a 与 A)视为不同。返回 0 到 1 之间的数值。若相似度 < score_cutoff,则返回 0。score_cutoff 默认为 0。 |
| 示例 | jaro_similarity('duck', 'goose') |
| 结果 | 0.8888888888888888 |
jaro_winkler_similarity(s1, s2[, score_cutoff])
| 说明 | 两个字符串之间的 Jaro-Winkler 相似度。不同大小写字符(如 a 与 A)视为不同。返回 0 到 1 之间的数值。若相似度 < score_cutoff,则返回 0。score_cutoff 默认为 0。 |
| 示例 | jaro_winkler_similarity('duck', 'goose') |
| 结果 | 0.9333333333333333 |
levenshtein(s1, s2)
| 说明 | 将一个字符串变为另一个字符串所需的最少单字符编辑次数(插入、删除或替换)。不同大小写字符(如 a 与 A)视为不同。 |
| 示例 | levenshtein('duck', 'db') |
| 结果 | 3 |
| 别名 | editdist3 |
格式化
fmt 语法
format(format, parameters...) 函数用于格式化字符串,语法大体遵循 fmt open-source formatting library。
不带额外参数的格式化:
SELECT format('Hello world'); -- Hello world
使用 {} 的格式化:
SELECT format('The answer is {}', 42); -- The answer is 42
使用位置参数的格式化:
SELECT format('I''d rather be {1} than {0}.', 'right', 'happy'); -- I'd rather be happy than right.
格式说明符
| 说明符 | 描述 | 示例 |
|---|---|---|
{:d} | 整数 | 654321 |
{:E} | 科学计数法 | 3.141593E+00 |
{:f} | 浮点数 | 4.560000 |
{:o} | 八进制 | 2375761 |
{:s} | 字符串 | asd |
{:x} | 十六进制 | 9fbf1 |
{:tX} | 整数,X 为千位分隔符 | 654 321 |
格式化类型
整数:
SELECT format('{} + {} = {}', 3, 5, 3 + 5); -- 3 + 5 = 8
布尔值:
SELECT format('{} != {}', true, false); -- true != false
格式化日期时间值:
SELECT format('{}', DATE '1992-01-01'); -- 1992-01-01
SELECT format('{}', TIME '12:01:00'); -- 12:01:00
SELECT format('{}', TIMESTAMP '1992-01-01 12:01:00'); -- 1992-01-01 12:01:00
格式化 BLOB:
SELECT format('{}', BLOB '\x00hello'); -- \x00hello
使用 0 补齐整数:
SELECT format('{:04d}', 33); -- 0033
目前补齐宽度暂不支持与千位分隔符同时使用。
使用整数构造时间戳:
SELECT format('{:02d}:{:02d}:{:02d} {}', 12, 3, 16, 'AM'); -- 12:03:16 AM
转换为十六进制:
SELECT format('{:x}', 123_456_789); -- 75bcd15
转换为二进制:
SELECT format('{:b}', 123_456_789); -- 111010110111100110100010101
使用千位分隔符打印数字
整数:
SELECT format('{:,}', 123_456_789); -- 123,456,789
SELECT format('{:t.}', 123_456_789); -- 123.456.789
SELECT format('{:''}', 123_456_789); -- 123'456'789
SELECT format('{:_}', 123_456_789); -- 123_456_789
SELECT format('{:t }', 123_456_789); -- 123 456 789
SELECT format('{:tX}', 123_456_789); -- 123X456X789
浮点、双精度与十进制:
SELECT format('{:,f}', 123456.789); -- 123,456.78900
SELECT format('{:,.2f}', 123456.789); -- 123,456.79
SELECT format('{:t..2f}', 123456.789); -- 123.456,79
printf 语法
printf(format, parameters...) 函数使用 printf syntax 来格式化字符串。
不带额外参数的格式化:
SELECT printf('Hello world');
Hello world
按给定顺序使用参数格式化字符串:
SELECT printf('The answer to %s is %d', 'life', 42);
The answer to life is 42
使用位置参数 %position$formatter 进行格式化,例如将第二个参数按字符串格式化写为 %2$s:
SELECT printf('I''d rather be %2$s than %1$s.', 'right', 'happy');
I'd rather be happy than right.
格式说明符
| 说明符 | 描述 | 示例 |
|---|---|---|
%c | 字符码转字符 | a |
%d | 整数 | 654321 |
%Xd | 带千位分隔符 X 的整数,X 可为 ,、.、''、_ | 654_321 |
%E | 科学计数法 | 3.141593E+00 |
%f | 浮点数 | 4.560000 |
%hd | 整数 | 654321 |
%hhd | 整数 | 654321 |
%lld | 整数 | 654321 |
%o | 八进制 | 2375761 |
%s | 字符串 | asd |
%x | 十六进制 | 9fbf1 |
格式化类型
整数:
SELECT printf('%d + %d = %d', 3, 5, 3 + 5); -- 3 + 5 = 8
布尔值:
SELECT printf('%s != %s', true, false); -- true != false
格式化日期时间值:
SELECT printf('%s', DATE '1992-01-01'); -- 1992-01-01
SELECT printf('%s', TIME '12:01:00'); -- 12:01:00
SELECT printf('%s', TIMESTAMP '1992-01-01 12:01:00'); -- 1992-01-01 12:01:00
格式化 BLOB:
SELECT printf('%s', BLOB '\x00hello'); -- \x00hello
使用 0 补齐整数:
SELECT printf('%04d', 33); -- 0033
使用整数构造时间戳:
SELECT printf('%02d:%02d:%02d %s', 12, 3, 16, 'AM'); -- 12:03:16 AM
转换为十六进制:
SELECT printf('%x', 123_456_789); -- 75bcd15
转换为二进制:
SELECT printf('%b', 123_456_789); -- 111010110111100110100010101
千位分隔符
整数:
SELECT printf('%,d', 123_456_789); -- 123,456,789
SELECT printf('%.d', 123_456_789); -- 123.456.789
SELECT printf('%''d', 123_456_789); -- 123'456'789
SELECT printf('%_d', 123_456_789); -- 123_456_789
浮点、双精度与十进制:
SELECT printf('%,f', 123456.789); -- 123,456.789000
SELECT printf('%,.2f', 123456.789); -- 123,456.79