【发布时间】:2015-11-29 00:05:03
【问题描述】:
我想写一个函数,计算输入的非空值。我的解决方案是:
CREATE FUNCTION
count_not_null (VARIADIC args anyarray) RETURNS BIGINT
AS $$
SELECT COUNT(x) FROM unnest(args) as x
$$ LANGUAGE SQL IMMUTABLE
;
当输入包含至少一个非空值时,这个函数就像一个魅力。但如果输入只包含空值(如SELECT count_not_null(null, null)),则错误
"错误:无法确定多态类型,因为输入具有类型 “未知”“
抛出。但是如果我们查看COALESCE,它会处理这种情况:只返回null。如何获得用户定义函数的一些行为?
【问题讨论】:
-
您可能不想(或不能)转换我猜的参数?
select count_not_null(null::bigint, null::bigint) -
SELECT count_not_null(null::int, null::int),可能吗? -
当然可以转换参数,但是我想实现
COALESCE函数的行为。 -
您也可以通过提供具有具体类型的版本来解决它。我不确定这是否会导致该类型的类型解析问题,但我不这么认为......
标签: postgresql null coalesce