web-dev-qa-db-ja.com

空の文字列とNULL値をCOALESCEする方法は?

2つ以上の引数を受け入れ、最初の非NULL AND非空( "")値を返す最速の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ステートメントほど高速ではありません。

どう思いますか?

44
MikeCW

速度が必要な場合、ユーザー関数を作成しないでください。これの代わりに:

_coalescenonempty(col1,col2||'blah',col3,'none');
_

これを行う:

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

つまり、非定数パラメーターごとに、実際のパラメーターをNULLIF( x ,'')で囲みます。

81
Dwayne Towell