webentwicklung-frage-antwort-db.com.de

Wie wird COALESCE für leere Zeichenfolgen und NULL-Werte durchgeführt?

Ich versuche, das schnellste COALESCE () zu erstellen, das zwei oder mehr Argumente akzeptiert und den ersten Wert ungleich Null UND nicht leer ("") zurückgibt.

Ich benutze das:

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;

Es ist ziemlich schnell, aber nirgends so schnell wie bei COALESCE- oder CASE WHEN-Anweisungen.

Was denkst du?

44
MikeCW

Erstellen Sie keine Benutzerfunktion, wenn Sie Geschwindigkeit möchten. An Stelle von:

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

mach das:

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

Das heißt, umgeben Sie für jeden nicht konstanten Parameter den aktuellen Parameter mit NULLIF( x ,'').

81
Dwayne Towell