我正在尝试制作接受两个或更多参数的最快 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 语句快。

你怎么认为?

最佳答案

不创建用户功能就是要速度。取而代之的是:

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

做这个:
COALESCE(NULLIF(col1,''),NULLIF(col2||'blah',''),NULLIF(col3,''),'none');

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

关于sql - 如何合并空字符串和 NULL 值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22393182/

10-16 15:21