按JSON数据类型postgres排序

时间:2014-09-22 06:22:17

标签: json postgresql

我有一个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同样的结果

3 个答案:

答案 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