2014-09-22 2 views
11

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

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 непосредственно, а также ж/такой же результат

ответ

26

Вы положили 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 
+0

Я тоже это пробовал. он работает, но по-прежнему не упорядочивает записи правильно. (по значениям для вещей) мне нужно указать значение или что-то еще? – user1767105

+0

@ user1767105 См. Обновление. Вы пытаетесь получить несуществующий ключевой «материал», поэтому он будет эквивалентен «ORDER BY NULL». –

+0

получил. извините, у меня были неверные данные. на самом деле это были данные: {"stuff" => {"name" => "stuff", "value": "awesome stuff"}} query заканчивается как select .... order by data -> "stuff" -> > «значение» ваша помощь заставила меня туда, хотя так спасибо! Кроме того, хороший ресурс: http://clarkdave.net/2013/06/what-can-you-do-with-postgresql-and-json/ – user1767105

6

Try:

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

+1

@EugenKonkov задал вопрос и ответы –

1

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

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

Хотя это прямо ответит на вопрос, я благодарен, что нашел это. Это помогло мне разрешить сортировку столбца JSON в алфавитном порядке, когда это число. – datashaman

Смежные вопросы