Postgres - 选择没有表格但来自函数的数据的行号
Posted
技术标签:
【中文标题】Postgres - 选择没有表格但来自函数的数据的行号【英文标题】:Postgres - Select rownumber without a table but data from a function 【发布时间】:2016-04-29 23:20:01 【问题描述】:我试图得到这样的结果:
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 中做错了什么?
【问题讨论】:
【参考方案1】:发生这种情况是因为 regexp_split_to_table 返回一个表,而不是每个行号的单个值。
也许另一种方法会奏效?例如,这给了我你想要的输出:
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
【讨论】:
谢谢,这对我有用!刚刚添加了一个外部选择,因为我需要按表 t 中的行号进行过滤,例如select value from ([your bottom query]) as table where rownumber = [my_number]
别担心,伙计。很高兴你们都排好了=)。以上是关于Postgres - 选择没有表格但来自函数的数据的行号的主要内容,如果未能解决你的问题,请参考以下文章
尽管函数定义中有 RETURN 语句,但 Postgres 查询没有结果数据的目的地
使用来自 Nodejs Postgres 查询的数据 [重复]