Zum Inhalt springen

Funktionen

Funktionssyntax

Funktionsverkettung über den Punktoperator

DuckDB unterstützt die Punktsyntax zur Funktionsverkettung. Damit kann der Funktionsaufruf fn(arg1, arg2, arg3, ...) als arg1.fn(arg2, arg3, ...) geschrieben werden. Zum Beispiel der folgende Einsatz der Funktion replace:

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

Das lässt sich wie folgt umschreiben:

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

Verwendung mit Literalen und Arrays

Um Funktionsverkettung auf Literale und nachfolgende Array-Zugriffe anzuwenden, müssen Sie das Argument in Klammern setzen, z. B.:

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

Ohne diese Klammern gibt DuckDB für den Funktionsaufruf einen Parser Error zurück:

Terminal window
Parser Error:
syntax error at or near "("

Einschränkungen

Funktionsverkettung über den Punktoperator ist auf skalare Funktionen beschränkt und wird für Tabellenfunktionen nicht unterstützt. Der folgende Aufruf gibt beispielsweise einen Parser Error zurück:

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

Außerdem können die Funktionen coalesce und ifnull derzeit nicht mit Funktionsverkettung verwendet werden:

SELECT (2).coalesce(0); -- does not work
SELECT (2).ifnull(0); -- does not work

Funktionen abfragen

Die Tabellenfunktion duckdb_functions() zeigt die Liste der derzeit ins System eingebauten Funktionen.

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 description
bar scalar VARCHAR [x, min, max, width] [DOUBLE, DOUBLE, DOUBLE, DOUBLE] Draws a band whose width is proportional to (x - min) and equal to width characters when x = max. width defaults to 80
base64 scalar VARCHAR [blob] [BLOB] Convert a blob to a base64 encoded string
bin scalar VARCHAR [value] [VARCHAR] Converts the value to binary representation
bit_count scalar TINYINT [x] [TINYINT] Returns the number of bits that are set
bit_length scalar BIGINT [col0] [VARCHAR] Number of bits in a string
bit_position scalar INTEGER [substring, bitstring] [BIT, BIT] Returns first starting index of the specified substring within bits, or zero if it is not present. The first (leftmost) bit is indexed 1
bitstring scalar BIT [bitstring, length] [VARCHAR, INTEGER] Pads the bitstring until the specified length

Derzeit sind Beschreibung und Parameternamen der Funktionen in der Funktion duckdb_functions() nicht verfügbar.