Arrays 如何将ANYARRAY函数的空数组值强制转换为ANYARRAY?
我使用的是pgv10。我需要的功能似乎是错误的功能:Arrays 如何将ANYARRAY函数的空数组值强制转换为ANYARRAY?,arrays,postgresql,Arrays,Postgresql,我使用的是pgv10。我需要的功能似乎是错误的功能: CREATE FUNCTION array_coalesce(ANYARRAY) RETURNS ANYARRAY AS $f$ SELECT CASE WHEN $1 IS NULL THEN array[]::ANYARRAY ELSE $1 END; $f$ language SQL IMMUTABLE; create or replace function array_coalesce(anyarray) returns an
CREATE FUNCTION array_coalesce(ANYARRAY) RETURNS ANYARRAY AS $f$
SELECT CASE WHEN $1 IS NULL THEN array[]::ANYARRAY ELSE $1 END;
$f$ language SQL IMMUTABLE;
create or replace function array_coalesce(anyarray)
returns anyarray as $f$
begin
if $1 is null then
select '{}' into $1;
end if;
return $1;
end
$f$ language plpgsql immutable;
select array_coalesce(null::int[]);
array_coalesce
----------------
{}
(1 row)
好奇心 。。。我开始简化一个复杂的问题,并进入了测试
selectcoalesce(null::text[],array[]::text[])
,该测试不起作用。。。所以这是一个很好的问题,如何实施它?但很抱歉,我做了一些工作,COALESCE(数组,数组)工作得很好(呸!)
所以,“合并问题”仅仅是说明性的。这里我真正想了解的是:如何使用
ANYARRAY
?
PS:PostgreSQL中的字符串
concat()
,| |
和其他连接运算符进行了一些“合并”
如何使用anyarray
这是一个有趣的问题,就问题中描述的用法而言。我知道的唯一方法是使用参数作为变量。在plpgsql(而不是普通sql)函数中可以:
CREATE FUNCTION array_coalesce(ANYARRAY) RETURNS ANYARRAY AS $f$
SELECT CASE WHEN $1 IS NULL THEN array[]::ANYARRAY ELSE $1 END;
$f$ language SQL IMMUTABLE;
create or replace function array_coalesce(anyarray)
returns anyarray as $f$
begin
if $1 is null then
select '{}' into $1;
end if;
return $1;
end
$f$ language plpgsql immutable;
select array_coalesce(null::int[]);
array_coalesce
----------------
{}
(1 row)
顺便说一下,您只需对数组使用coalesce()
:
select coalesce(null::text[], '{}'::text[]);
coalesce
----------
{}
(1 row)
谢谢。这个问题令人困惑,但你明白。是的,COALESCE()工作正常,我编辑了更好的标题和评论,这是一个例证。