【发布时间】:2016-05-23 15:35:56
【问题描述】:
我正在尝试在 postgreSQL 9.5 中编写一个以日期为参数的函数。我的表有一个名为 inception_date 的列,我希望函数返回表中 inception_date 大于作为变量提供的日期的所有行。以下是我的功能:
CREATE OR REPLACE FUNCTION somefunc(date) RETURNS setof table AS
$BODY$
DECLARE variable ALIAS FOR $1;
BEGIN
RETURN QUERY SELECT * FROM table WHERE inception_date > variable;
END;
$BODY$
LANGUAGE 'plpgsql';
SELECT somefunc('2014-07-02');
我找不到任何信息表明 posgreSQL 函数中日期的处理方式与其他数据类型不同,但此函数不显示任何输出,而查询
SELECT * FROM table WHERE inception_date > '2014-07-02';
返回 15 行。有谁知道这里可能出了什么问题?
【问题讨论】:
-
其实
SELECT somefunc('2014-07-02');和SELECT * FROM table WHERE inception_date > '2014-07-02';并不完全相同,因为当查询返回单个列时,函数返回record类型的单个列。你如何检查结果? -
嗯,使用“ALIAS FOR”而不是仅仅将参数名称放在函数定义中有点过时,而且您不想引用“plpgsql”语言规范,但这看起来应该可以工作。有些事情不像看起来那样。首先使用“SELECT * FROM somefunc ...”正确调用它。然后,通过 (1) 只返回整个表然后 (2) 显式检查常量日期来简化。告诉我们这是做什么的。
-
列
inception_date是什么类型的?
标签: sql postgresql function datetime