如何对空字符串和NULL值使用COALESCE函数?

97

我正在尝试创建最快的COALESCE()函数,该函数接受两个或多个参数,并返回第一个非null且非空("")值。

我正在使用以下代码:

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
不要担心“最快”的问题,直到你做出“可工作的”结果- 即使这里已经有一些工作,也要保持问题开放,让答案/建议涌现出来。 (也许“更好的解决方案”就是在模型中不允许空字符串;-)) - user2864740
1
我同意user2864740的观点:如果你想要防止null和空字符串,为什么不在第一时间就禁止将它们放入数据库呢? - user330315
1个回答

167

如果你想要速度,不要创建用户函数。不要这样做:

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

做这个:

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

也就是说,对于每个非常数参数,将实际参数用 NULLIF( x ,'') 括起来。


Coalesce未定义,这是怎么回事?你有什么想法吗? - venkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接