Подтвердить что ты не робот

Как COALESCE для пустых строк и значений NULL?

Я пытаюсь сделать самую быструю COALESCE(), которая принимает два или более аргумента, и возвращает первое ненулевое и непустое значение ("").

Я использую это:

CREATE OR REPLACE FUNCTION coalescenonempty(VARIADIC in_ordered_actual varchar[])
RETURNS varchar AS $$
  SELECT i
  FROM (SELECT unnest($1) AS i) t
  WHERE i IS NOT NULL AND i <> ''
  LIMIT 1;
$$ LANGUAGE sql;

Это довольно быстро, но все равно не так быстро, как COALESCE или CASE WHEN.

Как вы думаете?

4b9b3361

Ответ 1

Не создавайте пользовательскую функцию, вам нужна скорость. Вместо этого:

coalescenonempty(col1,col2||'blah',col3,'none');

сделайте следующее:

COALESCE(NULLIF(col1,''),NULLIF(col2||'blah'),NULLIF(col3,''),'none');

Это для каждого непостоянного параметра окружает фактический параметр с помощью NULLIF( x ,'').