函数语法
通过点操作符进行函数链式调用
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 * FROM ('/myfile.parquet').read_parquet()
是不被支持的。
查询函数
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;
function_name | function_type | return_type | parameters | parameter_types | 描述 |
---|---|---|---|---|---|
bar | 标量 | VARCHAR | [x, min, max, width] | [DOUBLE, DOUBLE, DOUBLE, DOUBLE] | 绘制一个宽度与 (x - min) 成比例的带,当 x = max 时,宽度等于 width 字符。width 默认为 80 |
base64 | 标量 | VARCHAR | [blob] | [BLOB] | 将blob转换为base64编码的字符串 |
bin | scalar | VARCHAR | [value] | [VARCHAR] | 将值转换为二进制表示 |
bit_count | scalar | TINYINT | [x] | [TINYINT] | 返回设置的位数 |
bit_length | 标量 | BIGINT | [col0] | [VARCHAR] | NULL |
bit_position | scalar | INTEGER | [substring, bitstring] | [BIT, BIT] | 返回指定子串在比特中的第一个起始索引,如果不存在则返回零。第一个(最左边的)比特索引为1 |
bitstring | scalar | BIT | [bitstring, length] | [VARCHAR, INTEGER] | 将bitstring填充到指定长度 |
目前,
duckdb_functions()
函数中无法获取函数的描述和参数名称。