如何对空字符串和 NULL 值进行 COALESCE?

我试图创建最快的 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 WHERE 语句那样快。

你觉得怎么样?

67319 次浏览

Do not create a user function is you want speed. Instead of this:

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

do this:

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

That is, for each non-constant parameter, surround the actual parameter with NULLIF( x ,'').