1

我在将脚本从 Oracle 转换为 Postgres 时遇到问题:

WITH q AS (
    SELECT 'ABCDE' str
    FROM dual)
SELECT 'TEST' AS WL_ID
    ,substr(str, LEVEL, 1) AS SUPPLY_MODE_ID
FROM q connect BY LEVEL < length(q.str) + 1;

我在 Postgres 中试过这个:

WITH RECURSIVE t(n) 
    AS (SELECT 'TEST', substring('ABCDE', 1, 1)
        UNION ALL
        SELECT 'TEST', substring('ABCDE', n+1,1)
        FROM t 
        where n<length('ABCDE')
)
SELECT * FROM t

我有错误:

错误:运算符不存在:文本 + 整数

我不知道如何返回与 Oracle 完全相同的结果。

4

1 回答 1

0

使用 Postgres 会容易得多:

select 'TEST' as wl_id, t.*
from unnest(string_to_array('ABCDE', null)) as t(supply_mode_id)

如果要确保保证行按字符在字符串中的顺序显示,则需要按以下顺序排列:

select 'TEST' as wl_id, t.supply_mode_id
from unnest(string_to_array('ABCDE', null)) with ordinality as t(supply_mode_id, idx)
order by t.idx;
于 2018-09-06T09:09:28.810 回答