У меня есть таблица в красном смещении, в которой столбец является сериализованным объектом PHP. Я хочу использовать строковые функции красного смещения, десериализовать столбец и создать другую временную таблицу с десериализованными значениями.
например:
исходная таблица будет выглядеть
| col A |
|a:1:{i:145;s:2:"14";} |
|a:1:{i:145;s:2:"15";} |
|a:1:{i:145;s:2:"16";} |
Ожидаемая выходная временная таблица для дальнейшей обработки:
| Col A | Col B |
| 145 | 14 |
| 145 | 15 |
| 145 | 16 |
Как я могу использовать строковые функции красного смещения для десериализации этого объекта?
для вашего конкретного случая это будет работать так:
select
split_part(split_part('a:1:{i:145;s:2:"14";}',':',4),';',1)
,trim(split_part(split_part('a:1:{i:145;s:2:"14";}',':',6),';',1),'"');
если могут быть другие форматы этой структуры, это не сработает
Решение, которое я придумал:
SELECT REGEXP_SUBSTR(SPLIT_PART(VALUE,';',1),'[^:]*$') as fieldName1,
trim('"' FROM REGEXP_SUBSTR(SPLIT_PART(VALUE,';',2),'[^:]*$')) as fieldName2;