Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Math functions

DataFusion contributes ~30 math functions. SQE adds a small set of Trino-named extras (e(), mod(), truncate(), sign()) plus base conversion and IEEE specials (infinity, nan).

Sign and rounding

FunctionOriginNotesTrinoSnowflakeSpark SQLDuckDB
abs(x)datafusion-builtinAbsolute value.yesyesyesyes
sign(x)sqe-trino-functions-1 / 0 / +1 (and NaN -> NaN). trino_functions.rs:100yesyesyesyes
ceil(x) / ceiling(x)datafusion-builtinRound up to integer.yesyesyesyes
floor(x)datafusion-builtinRound down.yesyesyesyes
round(x [, n])datafusion-builtinRound to N decimal places. Banker’s rounding by default.yesyesyesyes
trunc(x [, n])datafusion-builtinRound toward zero.yesyesyesyes
truncate(x [, n])sqe-trino-functionsTrino-named alias of trunc. trino_functions.rs:99yesyespartial-

Powers, logs, roots

FunctionOriginNotesTrinoSnowflakeSpark SQLDuckDB
pow(x, y) / power(x, y)datafusion-builtinx to the y.yesyesyesyes
sqrt(x)datafusion-builtinSquare root.yesyesyesyes
cbrt(x)datafusion-builtinCube root.yesyesyesyes
exp(x)datafusion-builtine^x.yesyesyesyes
ln(x)datafusion-builtinNatural log.yesyesyesyes
log(x [, base])datafusion-builtinLog base 10 by default; or specified base.yesyesyesyes
log2(x) / log10(x)datafusion-builtinSpecific bases.yesyesyesyes
e()sqe-trino-functionsEuler’s number. trino_functions.rs:97yes---
pi()datafusion-builtinPi as a constant.yesyesyesyes

Trigonometry

FunctionOriginNotesTrinoSnowflakeSpark SQLDuckDB
sin(x) / cos(x) / tan(x)datafusion-builtinStandard trig. Radians.yesyesyesyes
asin(x) / acos(x) / atan(x)datafusion-builtinInverse trig.yesyesyesyes
atan2(y, x)datafusion-builtinTwo-arg arctangent, full quadrant.yesyesyesyes
sinh(x) / cosh(x) / tanh(x)datafusion-builtinHyperbolic.yesyespartialyes
asinh(x) / acosh(x) / atanh(x)datafusion-builtinInverse hyperbolic.yes--yes
degrees(x)datafusion-builtinRadians -> degrees.yesyesyesyes
radians(x)datafusion-builtinDegrees -> radians.yesyesyesyes

Modular and bit / base

FunctionOriginNotesTrinoSnowflakeSpark SQLDuckDB
mod(n, m)sqe-trino-functionsModulo. Trino-named alias. trino_functions.rs:98yesyesyesyes
n % mdatafusion-builtinSQL operator form.yesyesyesyes
gcd(a, b)datafusion-builtinGreatest common divisor.yes--yes
lcm(a, b)datafusion-builtinLeast common multiple.yes--yes
factorial(n)datafusion-builtinn!.--yesyes
from_base(s, radix)sqe-trino-functions (ext)Parse a base-N string to integer. trino_functions_ext.rs:36yes---
to_base(n, radix)sqe-trino-functions (ext)Convert integer to base-N string. trino_functions_ext.rs:37yes---
SELECT to_base(255, 16);     -- 'ff'
SELECT from_base('ff', 16);  -- 255
SELECT to_base(8, 2);        -- '1000'

Random

FunctionOriginNotesTrinoSnowflakeSpark SQLDuckDB
random()datafusion-builtinUniform [0, 1). Volatile (re-evaluated per call).yesyesyesyes
uuid()datafusion-builtinRFC 4122 v4 random UUID.yesyesyesyes

IEEE specials

FunctionOriginNotesTrinoSnowflakeSpark SQLDuckDB
nanvl(x, y)datafusion-builtinIf x is NaN, return y; else x.--yes-
isnan(x)datafusion-builtinTrue if x is NaN.yes-yesyes
isinf(x)datafusion-builtinTrue if x is infinite.---yes
iszero(x)datafusion-builtinTrue if x is exactly zero.----
infinity()sqe-trino-functions (ext)Positive infinity (Double). trino_functions_ext.rs:28yes---
nan()sqe-trino-functions (ext)NaN (Double). trino_functions_ext.rs:29yes---

Statistical helpers

For aggregates (stddev, variance, corr, covar_*, regr_*), see Aggregate functions. The math page covers scalars only.

Examples

Bucketing and binning

SELECT
    floor(amount / 100) * 100 AS bucket,
    count(*)
FROM orders
GROUP BY 1
ORDER BY 1;

Geometric mean via logs

SELECT exp(avg(ln(price))) AS geo_mean FROM products WHERE price > 0;

DataFusion has no built-in geo_mean; the log identity is the standard workaround.

Distance from a reference point (Pythagorean)

SELECT
    name,
    sqrt(pow(x - 100, 2) + pow(y - 200, 2)) AS distance
FROM points
ORDER BY distance
LIMIT 10;

Hex and binary representations

SELECT
    n,
    to_base(n, 16) AS hex,
    to_base(n, 2)  AS bin,
    to_base(n, 8)  AS oct
FROM generate_series(0, 255) AS t(n);

Numeric type promotion

pow, log, exp always return Double regardless of input. abs, floor, ceil, round preserve the input type. +, -, * follow SQL standard widening: integer + decimal -> decimal; integer + double -> double; decimal + decimal -> decimal with combined precision.

/ between two integers in DataFusion returns Double, not integer. For integer division use floor(a / b) or div(a, b).

Decimal precision

DECIMAL(p, s) arithmetic widens precision per SQL standard. Two DECIMAL(18, 2) values multiplied produce DECIMAL(36, 4). Going beyond DECIMAL(38, ...) overflows; CAST or use Double.