我试图得到这样的结果:
rownumber | value
1 | a
2 | b
3 | c
没有任何表格,我会做这样的事情:
WITH RECURSIVE t(rownumber, value) AS (
select 1, regexp_split_to_table('a, b, c', ',')
UNION ALL
SELECT rownumber+1, regexp_split_to_table('a, b, c',',') FROM t
)
SELECT * FROM t limit (select count(*) from regexp_split_to_table('a, b, c', ','));
但结果并不像预期的那样。
我这样做的原因是因为价值' a,b,c'应该是一些变数。
在Oracle中,SQL看起来像这样:
SELECT value FROM (
SELECT ROWNUM AS rownumber, trim(REGEXP_SUBSTR('a, b, c','[^,]+', 1, LEVEL)) AS value
FROM DUAL CONNECT BY trim(REGEXP_SUBSTR('a, b, c', '[^,]+', 1, LEVEL)) IS NOT NULL
)
并且有效。
我在Postgresql中做错了什么?
答案 0 :(得分:0)
这是因为regexp_split_to_table返回一个表而不是每个rownumber的单个值。
也许一种不同的方法可行?例如,这给了我你想要的输出:
SELECT regexp_split_to_table('a,b,c', ',') as value,
rank() over(order by regexp_split_to_table('a,b,c', ',')) as rownumber
编辑:以上内容将重新排序可能不是您想要的结果。以下将保留顺序:
WITH T as
(
SELECT regexp_split_to_table('d,a,b,c', ',') as value
)
SELECT row_number() over() as rownumber,
value
FROM t