【问题标题】:SQL to split a column values into rows in NetezzaSQL 将列值拆分为 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

【问题讨论】:

    标签: netezza


    【解决方案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
          
      

      【讨论】:

        猜你喜欢
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        • 2016-04-10
        • 1970-01-01
        相关资源
        最近更新 更多