如何合并空字符串和 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 值?的主要内容,如果未能解决你的问题,请参考以下文章