"Как я могу достичь этого, не выполняя двойных вычислений, например, используя условие IFF или функцию LEN, чтобы сначала вычислить длину и выполнить те же вычисления, если len не равно нулю."
Описание является расплывчатым, но я думаю, что вы не хотите повторять код дважды и получать что-то вроде:
SELECT IFF(really_complex_computation > ..., if_true, sth(really_complex_computation))
Имейте в виду, что современные оптимизаторы запросов могут выполнять вычисления один раз, даже если они определены дважды.
Обычно с SQL вы можете сделать это с помощью cte:
WITH cte (
SELECT complex_computation AS complex_computation_result, ...
FROM ...
)
SELECT IIF(complex_computation_result > 0, if_true, sth(complex_computation_result)
FRON cte ...;
или с LATERAL:
SELECT *, IIF(complex_computation_result > 0, if_true, sth(complex_computation_result))
FROM ...,
LATERAL (SELECT complex_computation AS complex_computation_result) s;