Advent of SQL. Day 9 🗓️ День 9: нужно вытащить из вложенного json нужные поля. Я так и не могу запомнить, как правильно это делается в постгре, поэтому делала по интуиции) Заодно познакомилась с новыми функциями
Как получилось у меня:
select order_data['gift']['wrapped']::boolean as gift_wrapped, trim(both '"' from order_data['risk']['flag']::text) as risk_flag from orders
Я сделала в питонячем виде, и это сработало👍 Сначало было просто order_data['risk']['flag'], но мне не понравились лишние кавычки:
risk_flag
"high" "medium"
Перепроверила типы данных через pg_typeof. В первом случае тип столбца jsonb, а во втором - text:
select pg_typeof(order_data['risk']['flag']) as risk_flag, pg_typeof(order_data['risk']['flag']::text) as risk_flag2 from orders
Я кастанула, но кавычки не ушли. Пошла гуглить, наверняка есть хитрый trim без substring/replace. И такой есть! Вот эта прикольная конструкция позволяет нам удалять символы с разных сторон, общий синтаксис такой:
TRIM([LEADING | TRAILING | BOTH] trim_character FROM source_string)
У спикера же получилось более канонично 🙂 select (order_data -> 'gift' ->> 'wrapped')::boolean as gift_wrapped, order_data -> 'risk' ->> 'flag' as risk_flag from orders
-> достает по ключу json ->> достает по ключу строку
📍 Advent of SQL (с впн) 📍 SQL Advent Calendar (с впн) 📍 Мои решения
@data_engineerette