sql - 将复杂的 Oracle 查询转换为 Postgres

标签 sql database oracle postgresql oracle11g

我是 Oracle 的新手。我想将此 Oracle 查询转换为 PostgreSQL。但我不明白“start_date + level-1”是什么意思。什么是'v'?这些术语:LEVELCONNECT 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 吗?另外,如果您能提供任何能清楚解释这些术语的链接,那将对我大有裨益。

谢谢。

最佳答案

使用generate_series():

select date1
from generate_series(created_at, last_date, interval '1 day') gs(date1)

您的查询没有定义列的来源,但这通常可以用作:

select t.*, gs.date1
from t cross join lateral
     generate_series(t.created_at, t.last_date, interval '1 day') gs(date1)

关于sql - 将复杂的 Oracle 查询转换为 Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51615894/

相关文章:

php - 向查询添加行的语法

mysql - 数据库 - 多列索引

asp.net-mvc - 从网站向数据库中插入 100k 行

oracle - 在自动构建环境中进行 PL/SQL 预编译和代码质量检查?

sql - Pgsql删除某些列(不是全部)重复的行

sql - 从同一个表的组中减去值

java - 在 Grails + Oracle + CLOB 中使用 PropertyNotInList 时出错

java - 如何将 dbcp 连接转换为 oracle 连接?

php - 为什么我的查询没有定义该值?

sql - 数据库查询。如何在单行上捕获 'mixed' 状态