我有一个包含 JSON 数组的列的表。举个例子:
with example as (
select '["a", "b"]'::jsonb as col
union select ('["c", "d", "e"]'::jsonb) as col
)
select col from example
Run Code Online (Sandbox Code Playgroud)
返回:
col
["a", "b"]
["c", "d", "e"]
Run Code Online (Sandbox Code Playgroud)
我可以用 jsonb_array_elements
将每个数组扩展为行:
select jsonb_array_elements(col) from example
Run Code Online (Sandbox Code Playgroud)
返回:
jsonb_array_elements
"a"
"b"
"c"
"d"
"e"
Run Code Online (Sandbox Code Playgroud)
我想要每个数组元素的索引以及元素本身(有点像 Python 的 enumerate
),如下所示:
jsonb_array_elements array_index
"a" 1
"b" 2
"c" 1
"d" 2
"e" 3
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我的应用程序具有只读访问权限,因此我无法创建函数。
小智 6
使用with ordinality
:
with example (col) as (
values
('["a", "b"]'::jsonb),
('["c", "d", "e"]'::jsonb)
)
select t.*
from example, jsonb_array_elements(col) with ordinality as t(e,idx)
Run Code Online (Sandbox Code Playgroud)
返回:
with example (col) as (
values
('["a", "b"]'::jsonb),
('["c", "d", "e"]'::jsonb)
)
select t.*
from example, jsonb_array_elements(col) with ordinality as t(e,idx)
Run Code Online (Sandbox Code Playgroud)
with ordinality
仅当您在子句中使用 set 返回函数时才可以使用from
,无论如何,强烈建议您这样做。
归档时间: |
|
查看次数: |
2037 次 |
最近记录: |