Как 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.
Как вы думаете?
Ответы
Ответ 1
Не создавайте пользовательскую функцию, вам нужна скорость. Вместо этого:
coalescenonempty(col1,col2||'blah',col3,'none');
сделайте следующее:
COALESCE(NULLIF(col1,''),NULLIF(col2||'blah'),NULLIF(col3,''),'none');
Это для каждого непостоянного параметра окружает фактический параметр с помощью NULLIF( x ,'')
.