🗓️ День 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