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

时间:2016-10-06 15:46:16

标签: postgresql polymorphic-functions

我正在尝试实现访问功能' isnull'在postgresql中,此函数将表达式作为参数,如果已传递null,则返回true;如果不为null,则返回false。我知道postgres有'#NULL''并且' NOT NULL'关键字bu我将字符串或空值本身传递给函数时会不断出现多态错误,因为它们都是未知类型。

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

到目前为止我所拥有的:

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

2 个答案:

答案 0 :(得分:1)

我让这个工作

CREATE OR REPLACE FUNCTION isnull( anyelement ) RETURNS boolean as $$
BEGIN
    RETURN $1 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

答案 1 :(得分:1)

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

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

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

另外一个优点是可以内联这些SQL函数。