postgresql - unnest, для каждого результата

Я хотел бы создать представление, и я делаю некоторую обработку данных для каждого результата функции unnest.

В моем столбце column2 у меня есть:

  1. "12345"
  2. "123456"
  3. "12345,123456" или более

Я хотел бы сделать несколько unnest(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 ответ

Решение

Ты можешь использовать 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)

Рабочий пример на SQL Fiddle.

Другие вопросы по тегам