如何合并空字符串和 NULL 值?

Posted

技术标签:

【中文标题】如何合并空字符串和 NULL 值?【英文标题】:How to COALESCE for empty strings and NULL values? 【发布时间】:2014-04-19 01:07:16 【问题描述】:

我正在尝试制作最快的 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 语句那么快。

你怎么看?

【问题讨论】:

在你“工作”之前不要担心“最快”——即使这里有工作,保持问题开放,让答案/建议进来。(也许是“更好的解决方案” " 只是不允许模型中有空字符串 ;-) 我同意 user2864740:如果你想防止 null 和空字符串,为什么不首先不允许将它们放入数据库。 【参考方案1】:

不要创建用户函数是你想要的速度。而不是这个:

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

这样做:

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

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

【讨论】:

Coalesce 未定义它即将到来,您对此有什么想法吗??

以上是关于如何合并空字符串和 NULL 值?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断既不为null也不为空字符串

区分空字符串和null

Java判断空字符串和对象是否为null

Java判断空字符串和对象是否为null

hive的空字符串与null

Java 空字符串和 字符串为null的区别