通过日期范围循环 postgresql 函数

Eri*_*oks 1 postgresql

我有一个用户定义的函数。这个问题展示了如何遍历日期。使用这种方法,我尝试了这个查询:

select myfun(a::date) from generate_series('2015-01-01'::date,'2016-01-27','1 day') s(a)
Run Code Online (Sandbox Code Playgroud)

这不太行。它返回的是表单的单列:

(10101, "Sample",  "test")
(10102, "Sample2", "test2")
Run Code Online (Sandbox Code Playgroud)

实际上应该有三列。它将它们合二为一。

我注意到这与您在普通查询中得到的行为相同,例如select mytable当我省略星号时。上面的查询中没有星号,但添加一个会导致错误。

kli*_*lin 5

将函数调用放在FROM子句中:

select f.*
from 
    generate_series('2015-01-01'::date,'2016-01-27','1 day') s(a),
    myfun(a::date) f;
Run Code Online (Sandbox Code Playgroud)

或使用更正式的语法:

select f.*
from generate_series('2015-01-01'::date,'2016-01-27','1 day') s(a)
cross join myfun(a::date) f;
Run Code Online (Sandbox Code Playgroud)

这种形式的FROM子句称为横向连接