postgresql - unfst,对于每个结果

时间:2018-03-28 14:28:53

标签: postgresql unnest

我想创建一个视图,并为每个不需要的函数的结果做一些数据处理。

在我的专栏第2栏中,我有:

  1. “12345”
  2. “123456”
  3. “12345,123456”或更多号码
  4. 我想做一些 unfst(col2,','),并为每个结果执行以下操作:

    if length(col2) = 5 then treatment_1
    else if length(col2) = 6 then treatment_2
    

    表中的示例:

    col1      col2        
    -------------------
    D1        12345, 123456
    D3        12345
    D4        123456
    

    预期结果进入视图(对col2中的每一行进行处理):

    col1      col2        
    -------------------
    D1        12345
    D1        123456
    D3        12345
    D4        123456
    

1 个答案:

答案 0 :(得分:1)

您可以使用regexp_split_to_table将字符串拆分为多行:

select  t1.col1
,       case 
        when length(split.col2) > 5 then right(split.col2, 3)
        else replace(split.col2, '123', '***')
        end as col2
from    Table1 t1
cross join
         regexp_split_to_table(t1.col2, '\s*,\s*') split(col2)

Working example at SQL Fiddle.