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 中的行的主要内容,如果未能解决你的问题,请参考以下文章

将列的内容拆分为pyspark中的行

SQL查询将列值显示为表中的列名

将列中逗号分隔的字符串拆分为单独的行

Python:根据特定值将列拆分为串联的行

如何根据 Oracle SQL 中的某些条件将列拆分为 2?

将列值显式设置为空 SQL Developer