首页 文章

如何为空字符串和NULL值COALESCE?

提问于
浏览
38

我正在尝试创建最快的COALESCE()接受两个或多个参数,并返回第一个非null AND非空(“”)值 .

我正在使用这个:

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 回答

  • 71

    不要创建用户功能是你想要的速度 . 而不是这个:

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

    做这个:

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

    也就是说,对于每个非常量参数,用 NULLIF( x ,'') 包围实际参数 .

相关问题