我需要使用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过正-使用更好还是更简单的东西?
答案 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;