将复杂的Oracle查询转换为Postgre

时间:2018-07-31 14:33:23

标签: sql database oracle postgresql oracle11g

我是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吗?另外,如果您可以提供任何明确解释这些术语的链接,那对我将是非常有益的。

谢谢。

2 个答案:

答案 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