在 oracle sql 中拆分一个字符串数组
Split an array of strings in oracle sql
我想在 Oracle SQL 中使用 regex.substr 将一个列值拆分为多个列。此列包含两种格式的字符串
a) 字符串数组,例如:["abc","def"]
b) 单个字符串,例如 "abc"
我正在使用
regexp_substr(col1, '[^",]+', 1, 1) as val1,
regexp_substr(col1, '[^",]+', 1, 2) as val2,
regexp_substr(col1, '[^",]+', 1, 3) as val3,
regexp_substr(col1, '[^",]+', 1, 4) as val4,
使用上面的方法,我只能拆分格式 "b)"
对于格式 b),我得到以下结果
val1 val2 val3 val4
[ abc def ]
我不希望结果中包含方括号。请建议如何进行。提前致谢!
regexp_substr(col1, '[^",]+', 1, 1)
它只会 return 数组中的 NON-NULL
个值。数组中可能有 NULL
个值,因此下面的查询将 return 考虑到 NULL 值的数组中元素的确切位置:
with data as
(
select '["abc","def","xyz","klm","nop","qrs"]' arr from dual union all
select '["abc",,"xyz","klm","nop","qrs"]' arr from dual union all
select '["abc","def",,"lkj",]' arr from dual
)
select
regexp_substr(arr, '(.*?)(,|$)', 1, 1, NULL, 1) col1,
regexp_substr(arr, '(.*?)(,|$)', 1, 2, NULL, 1) col2,
regexp_substr(arr, '(.*?)(,|$)', 1, 3, NULL, 1) col3,
regexp_substr(arr, '(.*?)(,|$)', 1, 4, NULL, 1) col4,
regexp_substr(arr, '(.*?)(,|$)', 1, 5, NULL, 1) col5,
regexp_substr(arr, '(.*?)(,|$)', 1, 6, NULL, 1) col6
from
(
select replace(replace(replace(arr, '['), '"'), ']') arr from data
);
COL1 COL2 COL3 COL4 COL5 COL6
---- ---- ---- ---- ---- ----
abc def xyz klm nop qrs
abc xyz klm nop qrs
abc def lkj
我想在 Oracle SQL 中使用 regex.substr 将一个列值拆分为多个列。此列包含两种格式的字符串
a) 字符串数组,例如:["abc","def"]
b) 单个字符串,例如 "abc"
我正在使用
regexp_substr(col1, '[^",]+', 1, 1) as val1,
regexp_substr(col1, '[^",]+', 1, 2) as val2,
regexp_substr(col1, '[^",]+', 1, 3) as val3,
regexp_substr(col1, '[^",]+', 1, 4) as val4,
使用上面的方法,我只能拆分格式 "b)"
对于格式 b),我得到以下结果
val1 val2 val3 val4
[ abc def ]
我不希望结果中包含方括号。请建议如何进行。提前致谢!
regexp_substr(col1, '[^",]+', 1, 1)
它只会 return 数组中的 NON-NULL
个值。数组中可能有 NULL
个值,因此下面的查询将 return 考虑到 NULL 值的数组中元素的确切位置:
with data as
(
select '["abc","def","xyz","klm","nop","qrs"]' arr from dual union all
select '["abc",,"xyz","klm","nop","qrs"]' arr from dual union all
select '["abc","def",,"lkj",]' arr from dual
)
select
regexp_substr(arr, '(.*?)(,|$)', 1, 1, NULL, 1) col1,
regexp_substr(arr, '(.*?)(,|$)', 1, 2, NULL, 1) col2,
regexp_substr(arr, '(.*?)(,|$)', 1, 3, NULL, 1) col3,
regexp_substr(arr, '(.*?)(,|$)', 1, 4, NULL, 1) col4,
regexp_substr(arr, '(.*?)(,|$)', 1, 5, NULL, 1) col5,
regexp_substr(arr, '(.*?)(,|$)', 1, 6, NULL, 1) col6
from
(
select replace(replace(replace(arr, '['), '"'), ']') arr from data
);
COL1 COL2 COL3 COL4 COL5 COL6
---- ---- ---- ---- ---- ----
abc def xyz klm nop qrs
abc xyz klm nop qrs
abc def lkj