我需要从配置单元中的数据字符串数组中提取第5个值,
arr = ("abc", "123-4567", "10", "ax", "cdpp asd", "00", "q", "na", "avail", "n", "n", "na")
如何提取 "cdpp asd" 即第5个值。我们可以用 SUBSTR ,和 INSTR 但是有没有其他方法可以达到这个目的呢?
"cdpp asd"
SUBSTR
INSTR
nfzehxib1#
如果数组位于字符串列中,则可以使用删除方括号和双引号 regexp_replace 并使用 split() :
regexp_replace
split()
select split(regexp_replace('("abc", "123-4567", "10", "ax", "cdpp asd", "00", "q", "na", "avail", "n", "n", "na")','^\\(|\\)$|"',''),', *')[4]; OK cdpp asd
vuktfyat2#
1、 也许你可以试着写一本书 UDF 将此字符串转换为数组 arr ,则可以使用arr[4]访问第5个值;2、 或者可以使用以下方法获得第5个值:
UDF
arr
select tf.* from ( select regexp_replace('("abc", "123-4567", "10", "ax", "cdpp asd", "00", "q", "na", "avail", "n", "n", "na")','\\(|\\)|"','') as str ) t lateral view posexplode(split(str,', ')) tf as pos,val where tf.pos = 4;
注意:这种方法要求数组字符串没有括号。
bmvo0sr53#
arr = ("abc", "123-4567", "10", "ax", "cdpp asd", "00", "q", "na", "avail", "n", "n", "na") Select arr[4] from tablename;
输出:
cdpp asd
3条答案
按热度按时间nfzehxib1#
如果数组位于字符串列中,则可以使用删除方括号和双引号
regexp_replace
并使用split()
:vuktfyat2#
1、 也许你可以试着写一本书
UDF
将此字符串转换为数组arr
,则可以使用arr[4]访问第5个值;2、 或者可以使用以下方法获得第5个值:
注意:这种方法要求数组字符串没有括号。
bmvo0sr53#
输出: