检查是否有任何元素 ISNULL [Postgresql]

Check if anyelement ISNULL [ Postgresql ]

我正在尝试在 postgresql 中实现访问函数 'isnull' 此函数将表达式和函数作为参数 returns 如果已传递 null,则为 true,如果不为 null,则为 false .我知道 postgres 有 'IS NULL' 和 'NOT NULL' 关键字,但是当我将字符串或空值本身传递给函数时,我总是遇到多态错误,因为它们都是未知类型。

此方法必须使用函数来完成。

我目前拥有的:

CREATE OR REPLACE FUNCTION isnull( anyelement ) RETURNS anyelement as $$
    BEGIN
        IF  IS NULL THEN RETURN TRUE;
        ELSE RETURN FALSE;
        END IF;
    END
    $$LANGUAGE plpgsql;

我成功了

CREATE OR REPLACE FUNCTION isnull( anyelement ) RETURNS boolean as $$
BEGIN
    RETURN  IS NULL;
END
$$LANGUAGE plpgsql;

测试:

CREATE TEMP TABLE test(a int, b int);
INSERT INTO test VALUES (1, null), (2, null);
SELECT isnull(a), isnull(b) FROM test;

给出:

 isnull | isnull
--------+--------
 f      | t
 f      | t

如果您定义这两个函数,它将适用于所有情况:

CREATE OR REPLACE FUNCTION isnull(anyelement) RETURNS boolean
   LANGUAGE sql IMMUTABLE AS 'SELECT  IS NULL';

CREATE OR REPLACE FUNCTION isnull(unknown) RETURNS boolean
   LANGUAGE sql IMMUTABLE AS 'SELECT ::text IS NULL';

额外的好处是 SQL 可以内联这些函数。