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