在Postgresql中提取字符串并删除空/NULL元素

3
我需要从字符串中提取值,并使用Postgresql进行处理。 但对于我的特殊情况-如果元素值为null,我想删除它并将下一个元素的索引减1。
e.g. 
 assume my string is: "a$$b"

如果我使用

select string_to_array('a$$b','$')

结果是:
{a,,b}

如果我正在尝试:

SELECT unnest(string_to_array('a__b___d_','_')) EXCEPT SELECT ''

它改变了顺序。

1.d
2.a
3.b

订单变更对我不利。

我已经找到了另一种解决方案:

select array_remove( string_to_array(a||','||b||','||c,',') , '')
from (
select
split_part('a__b','_',1) a,
split_part('a__b','_',2) b,
split_part('a__b','_',3) c
)  inn

返回结果
{a,b}

然后从数组中 - 我需要按索引提取值 例如 Extract(ARRAY,2)

但是这个方法对我来说似乎有点过度杀伤力 - 有更好或更简单易用的方法吗?

1个回答

2
您可以使用with ordinality来在展开过程中保留索引信息,即可得到"最初的回答":
select a.c
from unnest(string_to_array('a__b___d_','_')) with ordinality as a(c,idx)
where nullif(trim(c), '') is not null
order by idx;

如果你想将它作为一个数组返回:

最初的回答:

select array_agg(a.c order by a.idx)
from unnest(string_to_array('a__b___d_','_')) with ordinality as a(c,idx)
where nullif(trim(c), '') is not null;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接