Lambda式は、高階SQL関数に引数として渡される匿名関数です。

Lambda式は、->を使って書かれます。

x -> x + 1
(x, y) -> x + y
x -> regexp_like(x, 'a+')
x -> x[1] / x[2]
x -> IF(x > 0, x, -x)
x -> COALESCE(x, 0)
x -> CAST(x AS JSON)
x -> x + TRY(1 / 0)

制限事項

ほとんどのSQL式は、Lambda本体で使用できますが、いくつかの例外があります:

transformを使用して配列列の要素の2乗を取得する:

SELECT numbers,
       transform(numbers, n -> n * n) as squared_numbers
FROM (
    VALUES
        (ARRAY[1, 2]),
        (ARRAY[3, 4]),
        (ARRAY[5, 6, 7])
) AS t(numbers);

結果:

numbers squared_numbers [1, 2] [1, 4] [3, 4] [9, 16] [5, 6, 7] [25, 36, 49]

関数transformは、配列の要素を安全に文字列にキャストするためにも使用できます。

SELECT transform(prices, n -> TRY_CAST(n AS VARCHAR) || '$') as price_tags
FROM (
    VALUES
        (ARRAY[100, 200]),
        (ARRAY[30, 4])
) AS t(prices);

結果:

price_tags [100, 200, 200] [30, 4, 4]

配列列だけでなく、Lambda式内で他の列もキャプチャして取得することができます。次のステートメントは、transformを使用して線形関数f(x) = ax + bの値を計算するためのこの機能のショーケースを提供しています。

SELECT xvalues,
       a,
       b,
       transform(xvalues, x -> a * x + b) as linear_function_values
FROM (
    VALUES
        (ARRAY[1, 2], 10, 5),
        (ARRAY[3, 4], 4, 2)
) AS t(xvalues, a, b);

結果:

xvalues a b linear_function_values [1, 2] 10 5 [15, 25] [3, 4] 4 2 [14, 18]