web-dev-qa-db-fra.com

Comment COALESCE pour les chaînes vides et les valeurs NULL?

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?

44
MikeCW

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 ,'').

81
Dwayne Towell