J'essaie de créer la COALESCE () la plus rapide qui accepte deux arguments ou plus, et renvoie la première valeur non nulle ET non vide ("").
J'utilise ceci:
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;
C'est assez rapide, mais toujours nulle part aussi vite que les instructions COALESCE ou CASE WHEN.
Qu'est-ce que tu penses?
Ne créez pas de fonction utilisateur si vous voulez de la vitesse. Au lieu de cela:
coalescenonempty(col1,col2||'blah',col3,'none');
faites ceci:
COALESCE(NULLIF(col1,''),NULLIF(col2||'blah',''),NULLIF(col3,''),'none');
Autrement dit, pour chaque paramètre non constant, entourez le paramètre réel de NULLIF( x ,'')
.