【发布时间】:2017-09-18 04:19:57
【问题描述】:
我正在尝试设计一个函数来解决这个问题。我的专栏中的城市看起来像这样。
1 |Curaçao-Amsterdam
2 |St. Christopher-Essequibo
3 |Texel-Riohacha-Buenos Aires-La Rochelle`
我已经使用此查询将其提取到元素数组中
select t2.rut1,t2.rutacompleta, t2.id
from (
select regexp_split_to_array(t.rutacompleta, E'[\-]+') as rut1,
t.rutacompleta,t.id
from (
select id, strpos(ruta, '-') as posinic, strpos(ruta, '-') as posfin,
ruta as rutacompleta
from dyncoopnet.todosnavios2
) t
) t2
这给出了这个结果:
{Curaçao,Amsterdam} {"St. Christopher",Essequibo} {Texel,Riohacha,"Buenos Aires","La Rochelle"}`
我想创建一个函数来将 * 数组元素提取到不同的列。我想到了这样的while函数:
create or replace function extractpuertos()
returns text as
$body$
declare
i integer;
puerto text;
begin
i := 1
while (i >=1)
loop
with tv as(
select t2.rut1,t2.rutacompleta, t2.id from(
select regexp_split_to_array(t.rutacompleta, E'[\-]+') as rut1,
t.rutacompleta,t.id from(
select id, strpos(ruta, '-') as posinic, strpos(ruta, '-') as posfin,ruta as
rutacompleta from dyncoopnet.todosnavios2) t)t2
)
select tv.rut1[i] as puerto from tv;
end loop;
return puerto;
end;
但我不确定这是一个正确的解决方案,以及如何实施它。有什么提示吗? 提前致谢!
【问题讨论】:
-
"将*数组元素提取到不同的列"?..你的意思是动态列数吗?..
-
为什么不
string_to_array(rutacompleta,'-')?..
标签: arrays postgresql function