我正在尝试实现访问功能' 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;
答案 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函数。