将SQL查询转换为带标识符的函数

时间:2013-02-06 14:01:50

标签: function postgresql postgresql-9.1 dynamic-sql

我在PostgreSQL中有一个SQL查询,可以从日期中提取doy(一年中的某一天)。我的疑问是:

select extract(doy from date_col) as n
from mytable
order by n

我想把它变成像extract_doy(tablename, date_column_name)这样的函数 我该怎么做?

1 个答案:

答案 0 :(得分:2)

假设你想要返回一组双打,那么这样的东西应该有效:

CREATE OR REPLACE FUNCTION tmp_extract_doy(table_name text, column_name text) 
RETURNS SETOF DOUBLE PRECISION
AS
$BODY$
DECLARE
BEGIN
    RETURN QUERY EXECUTE format('SELECT EXTRACT(doy from %I) AS n FROM %I ORDER BY n', column_name, table_name);
END
$BODY$
  LANGUAGE plpgsql
  COST 100;