在Postgresql中提取字符串并删除空/空元素
我需要用Postgresql从字符串中提取值 但是对于我的特殊场景——如果一个元素值为null,我想删除它并使下一个元素1索引更接近在Postgresql中提取字符串并删除空/空元素,sql,postgresql,Sql,Postgresql,我需要用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
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}
然后从数组中,我需要按索引提取值
e、 g.提取(数组,2)
但在我看来,这一条似乎有些过分——有更好的或更简单的方法可供使用吗?您可以使用带有顺序性的
在取消测试期间保留索引信息:
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;