SQL 将列值拆分为 Netezza 中的行
Posted
技术标签:
【中文标题】SQL 将列值拆分为 Netezza 中的行【英文标题】:SQL to split a column values into rows in Netezza 【发布时间】:2018-10-17 16:20:05 【问题描述】:我在一列中有以下方式的数据。列中的数据由两个空格分隔。
4EG C6CC C6DE 6MM C6LL L3BC C3
我需要把它分成如下。我尝试使用 REGEXP_SUBSTR 来执行此操作,但看起来它不在 SQL 工具包中。有什么建议吗?
1. 4EG
2. C6CC
3. C6DE
4. 6MM
5. C6LL
6. L3BC
7. C3
【问题讨论】:
【参考方案1】:这里已经回答了这个问题:http://nz2nz.blogspot.com/2016/09/netezza-transpose-delimited-string-into.html?m=1
请注意按钮上关于数组函数的最佳使用方式的注释。我已经测量了 regexp_extract_all_sp() 与重复正则表达式匹配的使用情况,好处可能非常大
【讨论】:
【参考方案2】:nz2nz.blogpost.com
的例子很难理解。我能够拼凑出这个方法:
with
n_rows as (--update on your end
select row_number() over(partition by 1 order by some_field) as seq_num
from any_table_with_more_rows_than_delimited_values
)
, find_values as ( -- fake data
select 'A' as id, '10,20,30' as orig_values
union select 'B', '5,4,3,2,1'
)
select
id,
seq_num,
orig_values,
array_split(orig_values, ',') as array_list,
get_value_varchar(array_list, seq_num) as value
from
find_values
cross join n_rows
where
seq_num <= regexp_match_count(orig_values, ',') + 1 -- one row for each value in list
order by
id,
seq_num
【讨论】:
以上是关于SQL 将列值拆分为 Netezza 中的行的主要内容,如果未能解决你的问题,请参考以下文章