Vraag volgorde volgens JSON-gegevenstype postgres


Ik heb een Postgres-tabel met een kolom van het type JSON met een reeks JSON-objecten erin. Ik wil de tabelrecords opvragen en de resultaten bestellen met een waarde die is opgeslagen in het JSON-veld. Ik krijg de query's uit te voeren, maar ze sorteren niet correct. Ik vind geen massa documentatie over het specifiek bestellen van JSON-veldtypen, dus ik hoop dat iemand dit tegenkomt.

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

De volgende SQL wordt uitgevoerd, maar de resultaten worden ongeordend geretourneerd

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

Ik gebruik rails, maar ik heb geprobeerd SQL ook rechtstreeks met hetzelfde resultaat uit te voeren


12
2017-09-22 06:22


oorsprong


antwoorden:


Jij zet asc in de veldnaam. Er is geen sleutel genoemd value asc in de json, dus data ->> 'value asc' zal altijd terugkeren NULL.

Je wilt eigenlijk:

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

om de json te evenaren, mogelijk zelfs:

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

27
2017-09-22 06:37



Proberen:

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


8
2018-05-12 08:50



Gebruik -> in plaats van ->> (->> krijgt een JSON-objectveld als tekst):

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

4
2017-12-15 16:57