在Postgresql中提取字符串并删除null / empty元素

时间:2019-02-25 13:45:44

标签: 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

订单变更对我不利。

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

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)

但是,在我看来,这似乎是一种矫kill过正-使用更好还是更简单的东西?

1 个答案:

答案 0 :(得分:1)

在取消嵌套期间,您可以使用val asYN: Map[String, String] = matricsData.mapValues { value => if (value) "Y" else "N" } metricKeys.map(key => asYN.getOrElse(key, StringUtils.EMPTY)) 来保留索引信息:

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;