Как заменить пустую строку строкой по умолчанию - PullRequest
0 голосов
/ 05 марта 2020

Я хочу заменить пустую строку (''), а не None на отдельную строку. Replace и regex_replace не годятся в этом случае. Как я могу добиться этого, не выполняя двойных вычислений, например, используя условие IFF или LEN, чтобы сначала вычислить длину и выполнить те же вычисления, если len не равно нулю.

1 Ответ

1 голос
/ 05 марта 2020

"Как я могу достичь этого, не выполняя двойных вычислений, например, используя условие 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;
...