我基本上有一个非常复杂的视图,目前返回我想要的上周聚合。
SELECT *
FROM ...
WHERE t1.event_date >= ('now'::text::date - 7)
...
现在我希望能够对任何给定的2个日期进行相同的计算,所以我希望能够将参数传递给我的视图。我想用以下内容替换WHERE子句:
WHERE t1.event_date BETWEEN %first date% AND %second_date%
我认为我应该能够使用set return函数执行此操作,但无法确切知道如何执行此操作。有什么想法吗?
答案 0 :(得分:1)
Create a function(有时称为表函数,返回一组行时)。 There are many (procedural) languages,特别是PL/pgSQL。在您的情况下LANGUAGE sql
完成工作:
CREATE OR REPLACE FUNCTION get_user_by_username(d1 date, d2 date)
RETURNS TABLE ( ... ) AS
$body$
SELECT ...
WHERE t1.event_date >= $1
AND t1.event_date < $2 -- note how I exclude upper border
$body$ LANGUAGE sql;
LANGUAGE sql
的众多例子之一:
Return rows from a PL/pgSQL function
LANGUAGE plpgsql
的众多例子之一:
PostgreSQL: ERROR: 42601: a column definition list is required for functions returning "record"