Подтвердить что ты не робот

Порядок по типу данных JSON postgres

У меня есть таблица Postgres, в которой есть столбец типа JSON, в котором есть куча объектов JSON. Я хочу запросить записи в таблице и заказать результаты по значению, хранящемуся в поле JSON. Я запускаю запросы, но они не сортируются правильно. Я не нахожу тонну документации по заказу типов полей JSON специально, поэтому надеюсь, что кто-то столкнется с этим.

data: {name: "stuff", value: "third option"}
data: {name: "stuff", value: "awesome stuff"}
data: {name: "stuff", value: "way cooler stuff"}

Выполняется следующий SQL, но результаты возвращают неупорядоченные

select * from table ORDER BY data->>'value asc' 

Я использую рельсы, но попытался запустить SQL напрямую, а также с тем же результатом

4b9b3361

Ответ 1

Вы помещаете asc в поле имя. В json нет ключа с именем value asc, поэтому data ->> 'value asc' всегда будет возвращать NULL.

Вы действительно хотите:

select * from table ORDER BY data->>'value' ASC 

чтобы соответствовать json, возможно даже:

select * 
from table 
WHERE data ->> 'name' = 'stuff'
ORDER BY data->>'value' ASC 

Ответ 2

Попробуйте:

ORDER BY cast(data->>'value' as integer) ASC

Ответ 3

Используйте -> вместо ->> (->> получает поле объекта JSON в виде текста):

select * from my_table ORDER BY data->'some_number' asc;