创建一个处理空值的 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;
我正在尝试创建一个将布尔值转换为 '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;