我有一个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'
我使用rails,但尝试直接运行SQL同样的结果
答案 0 :(得分:34)
您将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
答案 1 :(得分:12)
使用->
代替->>
(->>
获取JSON对象字段作为文字):
select * from my_table ORDER BY data->'some_number' asc;
答案 2 :(得分:11)
尝试:
ORDER BY cast(data->>'value' as integer) ASC