postgresql - unnest, для каждого результата
Я хотел бы создать представление, и я делаю некоторую обработку данных для каждого результата функции unnest.
В моем столбце column2 у меня есть:
- "12345"
- "123456"
- "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)