创建一个处理空值的 Postgres 布尔函数

Create a Postgres boolean function that handles nulls

我正在尝试创建一个将布尔值转换为 't''f'''(如果为 NULL)的函数。

CREATE OR REPLACE FUNCTION bool(b BOOLEAN) RETURNS VARCHAR
AS $$
BEGIN
IF b IS NULL THEN 
    RETURN ''; 
END IF;
IF b THEN 
    RETURN 't'; 
ELSE
    RETURN 'f';
END IF;
END; 
$$ LANGUAGE PLPGSQL CALLED ON NULL INPUT;

但是,下面总是returnsNULL。给出了什么?

SELECT bool(NULL)

bool 也是一个 built-in 函数和类型转换(因为存在同名的数据类型)。

您需要通过在函数前面加上架构前缀来明确引用您的函数:

select public.bool(null);

或为您的函数起一个不同的名称。


无关,但是:你的函数可以简化为:

CREATE OR REPLACE FUNCTION bool(b BOOLEAN) 
  RETURNS VARCHAR
AS $$  
  select coalesce(case when b then 't' else 'f' end, '');
$$
language sql
called on null input;