⌘+k Ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
函数

函数语法

通过点运算符进行函数链式调用

DuckDB 支持使用点语法进行函数链式调用。这允许将函数调用 fn(arg1, arg2, arg3, ...) 重写为 arg1.fn(arg2, arg3, ...)。例如,以下是 replace 函数 的用法:

SELECT replace(goose_name, 'goose', 'duck') AS duck_name
FROM unnest(['African goose', 'Faroese goose', 'Hungarian goose', 'Pomeranian goose']) breed(goose_name);

这可以重写如下:

SELECT goose_name.replace('goose', 'duck') AS duck_name
FROM unnest(['African goose', 'Faroese goose', 'Hungarian goose', 'Pomeranian goose']) breed(goose_name);

与字面量和数组结合使用

要将函数链式调用应用于字面量和后续的数组访问操作,您必须用括号将参数括起来,例如:

SELECT ('hello world').replace(' ', '_');
SELECT (2).sqrt();
SELECT (m[1]).map_entries()
FROM (VALUES ([MAP {'hello': 42}, MAP {'world': 42}])) t(m);

如果没有这些括号,DuckDB 将针对该函数调用返回 Parser Error(解析器错误)。

Parser Error:
syntax error at or near "("

限制

通过点运算符进行函数链式调用仅限于标量函数,不支持函数。例如,以下调用将返回 Parser Error(解析器错误)。

SELECT * FROM ('my_file.parquet').read_parquet(); -- does not work

查询函数

duckdb_functions() 表函数显示了当前系统中内置函数的列表。

SELECT DISTINCT ON(function_name)
    function_name,
    function_type,
    return_type,
    parameters,
    parameter_types,
    description
FROM duckdb_functions()
WHERE function_type = 'scalar'
  AND function_name LIKE 'b%'
ORDER BY function_name;
函数名称 函数类型 返回类型 参数 参数类型 描述
bar 标量 VARCHAR [x, min, max, width] [DOUBLE, DOUBLE, DOUBLE, DOUBLE] 绘制一个条带,其宽度与 (x - min) 成比例,当 x = max 时,宽度等于 width 个字符。width 默认为 80。
base64 标量 VARCHAR [blob] [BLOB] 将 blob 转换为 base64 编码的字符串
bin 标量 VARCHAR [value] [VARCHAR] 将值转换为二进制表示
bit_count 标量 TINYINT [x] [TINYINT] 返回已设置的位数
bit_length 标量 BIGINT [col0] [VARCHAR] NULL
bit_position 标量 INTEGER [substring, bitstring] [BIT, BIT] 返回指定子字符串在位串中的第一个起始索引,如果不存在则返回零。第一个(最左侧)位索引为 1
bitstring 标量 BIT [bitstring, length] [VARCHAR, INTEGER] 将位串填充至指定长度

目前,函数在 duckdb_functions() 函数中的描述和参数名称不可用。

本节页面