我是Oracle新手。我想将此Oracle查询转换为PostgreSQL。但是我不明白' start_date + level-1 '是什么意思。什么是“ v”?这些术语: LEVEL , CONNECT BY 对我来说是新的。我看了一些示例,以了解WITH,CONNECT BY,LEVEL通常意味着什么。但是我仍然不知道如何将其转换为postgreSql。
WITH t AS
(
SELECT start_date + level-1 As date1
FROM
(
SELECT created_at date1, last_date As date2 FROM dual
) v
CONNECT BY date1 + level-1 <= date2
)
SELECT ( ..... )
我的PostgreDB中具有tablefunc扩展名。在几篇文章中阅读有关此内容的信息。有人可以简要解释一下这是怎么回事,并帮助我将其转换为postgreSql吗?另外,如果您可以提供任何明确解释这些术语的链接,那对我将是非常有益的。
谢谢。
答案 0 :(得分:2)
使用test_myproject
:
generate_series()
您的查询未定义列的来源,但是通常可以用作:
select date1
from generate_series(created_at, last_date, interval '1 day') gs(date1)
答案 1 :(得分:1)
与oracle特定的递归语句相反。上面的答案提供了一种无需递归即可获取它的替代方法。如果要进行递归,则可以在postgresql中使用递归CTE,例如:
with recursive t1 (date1) as
(select created_at as date1 from dual
union all
select date1+1 as date1
from t1
where date1+1<=last_date)
select * from t1;
oracle按描述连接 https://docs.oracle.com/cd/B28359_01/server.111/b28286/queries003.htm#SQLRF52315 postresql中的递归CTE https://www.postgresql.org/docs/9.1/static/queries-with.html