Порядок по типу данных 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 напрямую, а также с тем же результатом
Ответы
Ответ 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;