как вытащить из БД redshift определенное значение из строки через postgreSQL

Имеются вот такие поля

event_value lvl
{"af_level":"19"}
{"af_level":"2"}

Нужно из поля event_value, которое имеет формат redshift вытащить только значение уровня с помощью postgreSQL

Пробовала через такую конструкцию substring(event_value, 14). Результат выводит такой введите сюда описание изображения. В таком случае не знаю как выкинуть оставшиеся ненужные элементы строки

Если подставить второй аргумент substring(event_value, 14, 2), то с двузначными числами становиться все как надо, с однозначными нет введите сюда описание изображения


Ответы (1 шт):

Автор решения: Alexander Pavlov

Это не формат "redshift", это JSON.

Надо сконвертировать строку к типу JSON, а потом уже читать поле с помощью оператора ->>

with d as (
  select '{"af_level":"19"}' event_value
  union all select '{"af_level":"1"}'
) 
select event_value::json->>'af_level' from d

Вот тут больше операторов, на будущее https://www.postgresql.org/docs/13/functions-json.html

→ Ссылка