使用 "CONNECT BY level" 将 oracle Sql 转换为 postgresql
Convert oracle Sql to postgresql with "CONNECT BY level"
因为 PostgreSQL 不支持“CONNECT BY level”关键字,我无法将以下 sql 翻译成 PostgreSQL
请告知如何在 PostgreSQL 上重写以下 oracle SQL :
SELECT
TO_DATE('01/01/2019','MM/DD/YYYY') + level - 1 AS days,
level AS level1
FROM
dual
CONNECT BY
level <= (
SELECT
abs(TO_DATE('01/01/2021','MM/DD/YYYY') - TO_DATE('01/10/2021','MM/DD/YYYY') )
FROM
dual
WHERE
'Daily' = 'Daily'
)
结果:
01-JAN-19 1
02-JAN-19 2
03-JAN-19 3
04-JAN-19 4
05-JAN-19 5
06-JAN-19 6
07-JAN-19 7
08-JAN-19 8
09-JAN-19 9
谢谢
Postgres 有一个方便的函数,叫做 generate_series()
,它使这类任务变得简单:
select dt::date, rn
from generate_series('2019-01-01'::date, '2019-01-09'::date, '1 day')
with ordinality as d(dt, rn)
我看不出 Oracle 查询的 connect by
子句中混淆逻辑的意义;标量子查询总是计算为 9
.
dt | rn
:--------- | -:
2019-01-01 | 1
2019-01-02 | 2
2019-01-03 | 3
2019-01-04 | 4
2019-01-05 | 5
2019-01-06 | 6
2019-01-07 | 7
2019-01-08 | 8
2019-01-09 | 9
因为 PostgreSQL 不支持“CONNECT BY level”关键字,我无法将以下 sql 翻译成 PostgreSQL
请告知如何在 PostgreSQL 上重写以下 oracle SQL :
SELECT
TO_DATE('01/01/2019','MM/DD/YYYY') + level - 1 AS days,
level AS level1
FROM
dual
CONNECT BY
level <= (
SELECT
abs(TO_DATE('01/01/2021','MM/DD/YYYY') - TO_DATE('01/10/2021','MM/DD/YYYY') )
FROM
dual
WHERE
'Daily' = 'Daily'
)
结果:
01-JAN-19 1
02-JAN-19 2
03-JAN-19 3
04-JAN-19 4
05-JAN-19 5
06-JAN-19 6
07-JAN-19 7
08-JAN-19 8
09-JAN-19 9
谢谢
Postgres 有一个方便的函数,叫做 generate_series()
,它使这类任务变得简单:
select dt::date, rn
from generate_series('2019-01-01'::date, '2019-01-09'::date, '1 day')
with ordinality as d(dt, rn)
我看不出 Oracle 查询的 connect by
子句中混淆逻辑的意义;标量子查询总是计算为 9
.
dt | rn :--------- | -: 2019-01-01 | 1 2019-01-02 | 2 2019-01-03 | 3 2019-01-04 | 4 2019-01-05 | 5 2019-01-06 | 6 2019-01-07 | 7 2019-01-08 | 8 2019-01-09 | 9